Java-二叉树-插入、删除、遍历

来源:互联网 发布:信用卡 对比.知乎 编辑:程序博客网 时间:2024/06/07 02:51

二叉树的具体特性和细节知识点,自行百度,直接上代码。

节点:节点内容、左子孩子、右子孩子、父亲

class Node {    private int data;    private Node leftChild;    private Node rightChild;    private Node parent;    public Node getParent() {        return parent;    }    public void setParent(Node parent) {        this.parent = parent;    }    public Node(int data, Node leftChild, Node rightChild, Node parent) {        this.data = data;        this.leftChild = leftChild;        this.rightChild = rightChild;        this.parent = parent;    }    public int getData() {        return data;    }    public void setData(int data) {        this.data = data;    }    public Node getLeftChild() {        return leftChild;    }    public void setLeftChild(Node leftChild) {        this.leftChild = leftChild;    }    public Node getRightChild() {        return rightChild;    }    public void setRightChild(Node rightChild) {        this.rightChild = rightChild;    }}


二叉树构造和操作:

public class BinaryTree {    private Node root;//根节点    //插入节点    public void insertNode(Node root, Node node) {        Node current = root;        while (true) {            if (node.getData() < current.getData()) {                if (current.getLeftChild() == null) {                    node.setParent(current);                    current.setLeftChild(node);                    break;                } else {                    current = current.getLeftChild();                }            } else {                if (current.getRightChild() == null) {                    node.setParent(current);                    current.setRightChild(node);                    break;                } else {                    current = current.getRightChild();                }            }        }    }    //删除节点    public void deleteNode(Node node) {        if (node.equals(root)) {            root = null;        } else if (node.getParent() != null) {            if (node == node.getParent().getLeftChild()) {                node.getParent().setLeftChild(null);            } else {                node.getParent().setRightChild(null);            }        }    }    //获取某节点的高度    public int geHeight(Node node) {        if (node == null) {            return 0;        } else {            int leftHeight = geHeight(node.getLeftChild());            int rightHeight = geHeight(node.getRightChild());            int max = Math.max(leftHeight, rightHeight);            return max + 1;        }    }    //获取某节点的子节点个数    public int getChildNodes(Node node) {        if (node == null) {            return 0;        } else {            int leftNodes = getChildNodes(node.getLeftChild());            int rightNodes = getChildNodes(node.getRightChild());            return leftNodes + rightNodes + 1;        }    }    //先序遍历树    public void PreOrder(Node root) {        if (root == null)            return;        System.out.print(root.getData() + " ");        PreOrder(root.getLeftChild());        PreOrder(root.getRightChild());    }    //中序    public void MidOrder(Node root) {        if (root == null) return;        MidOrder(root.getLeftChild());        System.out.print(root.getData() + " ");        MidOrder(root.getRightChild());    }    //后序    public void LastOrder(Node root) {        if (root == null) return;        LastOrder(root.getLeftChild());        LastOrder(root.getRightChild());        System.out.print(root.getData() + " ");    }    public BinaryTree() {    }    public BinaryTree(Node root) {        this.root = root;    }    public Node getRoot() {        return root;    }    public void setRoot(Node root) {        this.root = root;    }}

测试:

public class Main {    public static void main(String[] args) {        BinaryTree bt = new BinaryTree(new Node(1, null, null, null));        int a[] = {5, 3, 2, 7, 4, 9, 8};        for (int i = 0; i < 7; i++) {            bt.insertNode(bt.getRoot(), new Node(a[i], null, null, null));        }//        System.out.println(bt.geHeight(root));//高度//        bt.PreOrder(root);//        System.out.println();//        bt.MidOrder(root);//        System.out.println();//        bt.LastOrder(root);//        System.out.println();//        bt.deleteNode(bt.getRoot());//        bt.PreOrder(bt.getRoot()); //       System.out.println(bt.getChildNodes(bt.getRoot()));//子节点数    }}



阅读全文
0 0
原创粉丝点击