BinaryTreeTraversal(二叉树遍历)

二叉树遍历

遍历命名

根据访问结点操作发生位置命名:
① NLR: 前序遍历(Preorder Traversal 亦称(先序遍历))
——访问根结点的操作发生在遍历其左右子树之前。
② LNR: 中序遍历(Inorder Traversal)
——访问根结点的操作发生在遍历其左右子树之中(间)。
③ LRN: 后序遍历(Postorder Traversal)
——访问根结点的操作发生在遍历其左右子树之后。
注意:
由于被访问的结点必是某子树的根,所以N(Node)、L(Left subtree)和R(Right subtree)又可解释为根、根的左子树和根的右子树。NLR、LNR和LRN分别又称为 先根遍历、中根遍历和后根遍历。

 概念抄至百度百科:https://baike.baidu.com/item/二叉树遍历/9796049?fr=aladdin

 

Java代码实现:

public class BinaryTreeTraversal {

    /**
     *                            1
     *                 2                      3
     *            4       5              6          7
     *         8    9  10   11       12    13   14    15
     *
     *  前序 => 1|2|4|8|9|5|10|11|3|6|12|13|7|14|15|
     *  中序 => 8|4|9|2|10|5|11|1|12|6|13|3|14|7|15|
     *  后序 => 8|9|4|10|11|5|2|12|13|6|14|15|7|3|1|
     */
    public static void main(String[] args) {
        Node n1 = new Node(1);
        BinaryTree binaryTree = new BinaryTree(n1);

        Node n2 = new Node(2);Node n3 = new Node(3);
        Node n4 = new Node(4);Node n5 = new Node(5);
        Node n6 = new Node(6);Node n7 = new Node(7);
        Node n8 = new Node(8);Node n9 = new Node(9);
        Node n10 = new Node(10);Node n11 = new Node(11);
        Node n12 = new Node(12);Node n13 = new Node(13);
        Node n14 = new Node(14);Node n15 = new Node(15);

        n1.setLeftSubNode(n2);n1.setRightSubNode(n3);
        n2.setLeftSubNode(n4);n2.setRightSubNode(n5);
        n3.setLeftSubNode(n6);n3.setRightSubNode(n7);
        n4.setLeftSubNode(n8);n4.setRightSubNode(n9);
        n5.setLeftSubNode(n10);n5.setRightSubNode(n11);
        n6.setLeftSubNode(n12);n6.setRightSubNode(n13);
        n7.setLeftSubNode(n14);n7.setRightSubNode(n15);

        binaryTree.preOrderTraversal();
        System.out.println("");
        binaryTree.inOrderTraversal();
        System.out.println("");
        binaryTree.postOrderTraversal();
    }


    public static class BinaryTree {

        private Node root;

        public void preOrderTraversal() {
            this.root.preOrderTraversal();
        }

        public void inOrderTraversal() {
            this.root.inOrderTraversal();

        }

        public void postOrderTraversal() {
            this.root.postOrderTraversal();
        }


        public BinaryTree(Node root) {
            this.root = root;
        }

        public Node getRoot() {
            return root;
        }

        public void setRoot(Node root) {
            this.root = root;
        }
    }

    public static class Node {

        private int id;

        private Node leftSubNode;

        private Node rightSubNode;

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

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public Node getLeftSubNode() {
            return leftSubNode;
        }

        public void setLeftSubNode(Node leftSubNode) {
            this.leftSubNode = leftSubNode;
        }

        public Node getRightSubNode() {
            return rightSubNode;
        }

        public void setRightSubNode(Node rightSubNode) {
            this.rightSubNode = rightSubNode;
        }

        /**
         * NLR:前序遍历(Preorder Traversal 亦称(先序遍历))
         * 访问根结点的操作发生在遍历其左右子树之前。
         */
        public void preOrderTraversal() {
            //N
            System.out.print(this);

            //L
            if (this.leftSubNode != null) {
                this.leftSubNode.preOrderTraversal();
            }

            //R
            if (this.rightSubNode != null) {
                this.rightSubNode.preOrderTraversal();
            }
        }

        /**
         * LNR:中序遍历(Inorder Traversal)
         * 访问根结点的操作发生在遍历其左右子树之中(间)。
         */
        public void inOrderTraversal() {
            //L
            if (this.leftSubNode != null) {
                this.leftSubNode.inOrderTraversal();
            }

            //N
            System.out.print(this);

            //R
            if (this.rightSubNode != null) {
                this.rightSubNode.inOrderTraversal();
            }
        }

        /**
         * LRN:后序遍历(Postorder Traversal)
         * 访问根结点的操作发生在遍历其左右子树之后。
         */
        public void postOrderTraversal() {
            //L
            if (this.leftSubNode != null) {
                this.leftSubNode.postOrderTraversal();
            }

            //R
            if (this.rightSubNode != null) {
                this.rightSubNode.postOrderTraversal();
            }

            //N
            System.out.print(this);
        }

        @Override public String toString() {
            return this.getId() + "|";
        }
    }

}

 

转载于:https://www.cnblogs.com/sleepingDogs/p/11143957.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值