美文网首页
二叉树遍历

二叉树遍历

作者: 神棄丶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;
    }

相关文章

  • 二叉树 基础操作

    二叉树的使用 二叉树结构 先序创建二叉树 DFS 先序遍历二叉树 中序遍历二叉树 后序遍历二叉树 BFS 层次遍历...

  • 关于二叉树的算法题

    前序遍历中序遍历后序遍历判断是否是平衡二叉树判断是否是对称二叉树判断二叉树高度按照层遍历二叉树判断二叉树宽度

  • 二叉树遍历

    二叉树 二叉树的存储结构 前序遍历 中序遍历 后序遍历 遍历代码 反转二叉树 深入学习二叉树 二叉树-你必须要懂!...

  • 二叉树操作

    树节点 逐行顺序解析二叉树 前序遍历二叉树 中序遍历二叉树 后序遍历二叉树 删除指定数值的节点 前序遍历顺序存储的...

  • 数据结构与算法之二叉树遍历(七)

    目录 前序遍历中序遍历后序遍历层序遍历遍历方式的选择条件根据遍历结果重构二叉树翻转二叉树计算二叉树的高度判断一棵树...

  • 二叉树三种遍历Swift代码实现

    二叉树的三种遍历 二叉树 前序遍历 中序遍历 后序遍历 另外 不得不说,得到二叉树的前序遍历和中序遍历的结果或者后...

  • 二叉树的遍历

    二叉树的遍历 二叉树遍历 分为前序遍历、中序遍历和后序遍历。 前序遍历 (DLR) 先访问根节点,然后前序遍历左子...

  • 前端二叉树

    (一)构造二叉树 (二)中序遍历 (三)前序遍历 前序遍历可以复制二叉树,效率比重新构造二叉树高 (四)后序遍历 ...

  • 数据结构:树的实现和遍历(c++)

    (一)二叉树的遍历——递归实现 二叉树常见的遍历方式分为前序遍历、中序遍历和后序遍历。 1 前序遍历 前序遍历也叫...

  • leetcode 144 145 94

    二叉树遍历 前序遍历 中序遍历 后序遍历

网友评论

      本文标题:二叉树遍历

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