java(十三) 简单二叉树实现

2017-09-29  本文已影响0人  Nic_ofh

一、BinaryTreeDemo类

package 二叉树;

public class Demo {
    public static void main(String[] args) {
        BinaryTree binaryTree = new BinaryTree();
        binaryTree.add(8);
        binaryTree.add(1);
        binaryTree.add(22);
        binaryTree.add(33);
        binaryTree.add(17);
        binaryTree.add(4);
        binaryTree.add(2);
        binaryTree.add(6);

        binaryTree.printCenterTree();
        System.out.println("中序");

        binaryTree.printBeforeTree();
        System.out.println("前序");

        binaryTree.printAfterTree();
        System.out.println("后序");

    }
}

二、BinaryTree类

package 二叉树;

// 比较小的数放在左边,比较大的书放在右边
public class BinaryTree {

    private Node root; // 先定义一个根节点

    public void add(int data) {
        if (root == null) {  // 如果跟节点不存在,就把数据放在根节点
            root = new Node(data);
        } else {
            root.addNode(data);
        }
    }

    public void printCenterTree() {
        root.printCenterNode();
    }

    public void printBeforeTree() {
        root.printBeforeNode();
    }

    public void printAfterTree() {
        root.printAfterNode();
    }

    private class Node {
        private int data;   // 数据
        private Node left;  // 左边
        private Node right; // 右边

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

        public void addNode(int data) {
            if (data > this.data) {  // 大于根节点数放在右边
                if (this.right == null) {  // 如果根节点没有节点,就实例化赋值给右边
                    this.right = new Node(data);
                } else {
                    this.right.addNode(data); // 如果存在右节点,一直递归到没有节点
                }
            } else {
                if (this.left == null) {
                    this.left = new Node(data);
                } else {
                    this.left.addNode(data);
                }
            }
        }

        // 打印节点
        //中序打印(左根右)
        public void printCenterNode() {
            // 如果左节点存在,递归到不存在
            if (this.left != null) {
                this.left.printCenterNode();
            }

            System.out.print(this.data + "=>");

            // 如果右节点存在,递归到不存在
            if (this.right != null) {
                this.right.printCenterNode();
            }
        }

        // 前序打印(根左右)
        public void printBeforeNode() {

            System.out.print(this.data + "=>");

            // 如果左节点存在,递归到不存在
            if (this.left != null) {
                this.left.printCenterNode();
            }


            // 如果右节点存在,递归到不存在
            if (this.right != null) {
                this.right.printCenterNode();
            }
        }

        // 后续遍历 (左右根)
        public void printAfterNode() {

            // 如果左节点存在,递归到不存在
            if (this.left != null) {
                this.left.printCenterNode();
            }


            // 如果右节点存在,递归到不存在
            if (this.right != null) {
                this.right.printCenterNode();
            }

            System.out.print(this.data + "=>");

        }
    }
}

上一篇下一篇

猜你喜欢

热点阅读