base - 算法-Java实现二叉树及其遍历

47 阅读1分钟

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。

public class BinaryTree2 {
    static class Node {
        private Node left;
        private Node right;
        private int value;

        public Node(int value) {
            this.value = value;
        }
    }

    private Node root;

    private Node addNode (Node curr, int value) {
        if (null == curr) {
            return new Node(value);
        }
        if (value < curr.value) {
            curr.left = addNode(curr.left, value);
        } else if (value > curr.value) {
            curr.right = addNode(curr.right, value);
        }
        return curr;
    }

    public void addNode (int value) {
        final Node tmp = root;
        root = addNode(tmp, value);
    }

    private void pre (Node curr) {
        if (null != curr) {
            System.out.println(curr.value);
            pre(curr.left);
            pre(curr.right);
        }
    }

    private void in (Node curr) {
        if (null != curr) {
            in(curr.left);
            System.out.println(curr.value);
            in(curr.right);
        }
    }

    private void post (Node curr) {
        if (null != curr) {
            post(curr.left);
            post(curr.right);
            System.out.println(curr.value);
        }
    }

    private void level (Node curr) {
        if (null != curr) {
            LinkedList<Node> linkedList = new LinkedList<>();
            linkedList.add(curr);
            while (!linkedList.isEmpty()) {
                Node tmp = linkedList.poll();
                System.out.println(tmp.value);
                if (null != tmp.left) {
                    linkedList.add(tmp.left);
                }
                if (null != tmp.right) {
                    linkedList.add(tmp.right);
                }
            }
        }
    }

    private int size (Node curr) {
        if (null == curr) {
            return 0;
        }
        return 1 + size(curr.left) + size(curr.right);
    }

    private int height (Node curr) {
        if (null == curr) {
            return 0;
        }
        int i = height(curr.left);
        int j = height(curr.right);
        return (i < j) ? (j + 1) : (i + 1);
    }

    public int height () {
        final Node tmp = root;
        return height(tmp);
    }

    public int size () {
        final Node tmp = root;
        return size(tmp);
    }

    public void pre () {
        final Node tmp = root;
        pre(tmp);
    }

    public void in () {
        final Node tmp = root;
        in(tmp);
    }

    public void post () {
        final Node tmp = root;
        post(tmp);
    }

    public void level () {
        final Node tmp = root;
        level(tmp);
    }

    public static void main(String[] args) {
        BinaryTree2 binaryTree2 = new BinaryTree2();
        binaryTree2.addNode(4);
        binaryTree2.addNode(7);
        binaryTree2.addNode(3);
        binaryTree2.addNode(5);
        binaryTree2.addNode(10);
        binaryTree2.addNode(1);
        binaryTree2.addNode(8);

        System.out.println("前");
        binaryTree2.pre();
        System.out.println("中");
        binaryTree2.in();
        System.out.println("后");
        binaryTree2.post();
        System.out.println("层");
        binaryTree2.level();

        System.out.println("个数:");
        System.out.println(binaryTree2.size());

        System.out.println("高度:");
        System.out.println(binaryTree2.height());
    }

}

在这里插入图片描述