美文网首页
二叉树遍历

二叉树遍历

作者: 神棄丶Aria | 来源:发表于2017-08-31 18:08 被阅读0次

    一、原文链接

    http://blog.csdn.net/gfj0814/article/details/51637696
    原文写的挺好的,简洁易懂。于是借鉴过来放在自己的博客下方便自己整理与记录。如有侵权,必将第一时间删除。

    二、二叉树特点

    1、第i层至多有2^(i-1)个节点(i >= 1)
    2、深度为k的二叉树至多有2^(k-1)个节点(k>=1)
    3、父节点记为parent,则子节点位置 左节点 = parent * 2 + 1 右节点 = parent * 2 + 2
    4、子节点记为child,则父节点位置 = (child - 1) / 2
    5、对于任意一棵二叉树T而言,其叶子节点数目为N0,度为2的节点数目为N2,则有N0 = N2 + 1
    6、具有n个节点的完全二叉树的深度为n/2

    三、二叉树遍历

    1、初始化操作

    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * Created by Aria on 2017/8/31.
     */
    public class Tree {
    
        Node root;
        List<Node> list = new ArrayList<>();
    
        public void init(){
            Node x=new Node("X",null,null);
            Node y=new Node("Y",null,null);
            Node d=new Node("d",x,y);
            Node e=new Node("e",null,null);
            Node f=new Node("f",null,null);
            Node c=new Node("c",e,f);
            Node b=new Node("b",d,null);
            Node a=new Node("a",b,c);
            root =a;
        }
    
        public Tree(){
            init();
        }
    
        static class Node{
            Node left;
            Node right;
            String val;
    
            public Node(String val,Node left,Node right){
                this.val = val;
                this.left = left;
                this.right = right;
            }
        }
    
    }
    

    2、前序遍历

        public void preOrder(Node node){
            list.add(node);
    
            if (node.left != null)
                preOrder(node.left);
            if (node.right != null)
                preOrder(node.right);
        }
    

    3、中序遍历

        public void inOrder(Node node){
            if (node.left != null)
                inOrder(node.left);
            list.add(node);
            if (node.right != null)
                inOrder(node.right);
        }
    

    4、后序遍历

        public void postOrder(Node node){
            if (node.left != null)
                postOrder(node.left);
            if (node.right != null)
                postOrder(node.right);
            list.add(node);
        }
    

    5、获取树的深度

        public int getTreeDepth(Node node){
            if (node.left == null && node.right == null)
                return 1;
            int left = 0,right = 0;
            if (node.left != null)
                left = getTreeDepth(node.left);
    
            if (node.right != null)
                right = getTreeDepth(node.right);
            return left > right ? left + 1: right +1;
        }
    

    相关文章

      网友评论

          本文标题:二叉树遍历

          本文链接:https://www.haomeiwen.com/subject/kvfcjxtx.html