美文网首页
二叉树遍历

二叉树遍历

作者: 乐百事52淑熙 | 来源:发表于2018-05-17 14:23 被阅读0次

首先,我们来看一下二叉树结构。

二叉树

二叉树有三种遍历方式:

前序遍历:根左右 ABDCEF

中序遍历:左根右 DBAECF

后序遍历:左右根 DBEFCA

加上逐层遍历:ABCDEF

因此,按照这样的顺序,就有四种不同的代码,具体如下。

class TreeNode

{

public T data;

public TreeNodeleft;

public TreeNoderight;

public TreeNode(T data, TreeNode left, TreeNode right)

{

this.data = data;

        this.left = left;

        this.right = right;

    }

}

public class BinaryTree {

    public static void main(String[] args) {

        TreeNode D =new TreeNode<>("D",null,null);

        TreeNode E =new TreeNode<>("E",null,null);

        TreeNode F =new TreeNode<>("F",null,null);

        TreeNode B =new TreeNode<>("B",D,null);

        TreeNode C =new TreeNode<>("C",E,F);

        TreeNode root =new TreeNode<>("A",B,C);

        pre(root);

        System.out.println();

        mid(root);

        System.out.println();

        bac(root);

        System.out.println();

    }

//递归后序

private static void bac(TreeNode root) {

if(root !=null){

bac(root.left);

            bac(root.right);

            System.out.print(root.data+"  ");

        }

}

//递归中序

private static void mid(TreeNode root) {

if(root !=null){

mid(root.left);

            System.out.print(root.data+"  ");

            mid(root.right);

        }

}

//递归前序

private static void pre(TreeNode root) {

if(root !=null){

System.out.print(root.data+"  ");

            pre(root.left);

            pre(root.right);

        }

}

//非递归后序

private static void baccir(TreeNode root) {

class NodeFlag{

TreeNodenode;

        char tag;

        public NodeFlag(TreeNode node, char tag) {

super();

            this.node = node;

            this.tag = tag;

        }

}

Stack>> stack=new Stack>>();

    TreeNode p=root;

    NodeFlag> bt;

    //栈不空或者p不空时循环

    while(p!=null || !stack.isEmpty())

{

//遍历左子树

        while(p!=null)

{

bt=new NodeFlag(p, 'L');

            stack.push(bt);

            p=p.left;

        }

//左右子树访问完毕访问根节点

        while(!stack.isEmpty() && stack.peek().tag=='R')

{

bt=stack.pop();

            System.out.print(bt.node.data+"  ");

        }

//遍历右子树

        if (!stack.isEmpty())

{

bt=stack.peek();

            bt.tag='R';

            p=bt.node;

            p=p.right;

        }

}

}

//非递归中序

private static void midcir(TreeNode root) {

TreeNode p = root;

    Stack> stack =new Stack<>();

    while(p!=null||!stack.isEmpty()){

if(p!=null){

stack.push(p);

            p = p.left;

        }else {

p = stack.pop();

            System.out.print(p.data+"  ");

            p = p.right;

        }

}

}

//非递归前序

private static void precir(TreeNode root) {

TreeNode p = root;

    Stack> stack =new Stack<>();

    while(p!=null||!stack.isEmpty()){

if(p!=null){

stack.push(p);

            System.out.print(p.data+"  ");

            p = p.left;

        }else {

p = stack.pop();

            p = p.right;

        }

}

}

//逐层遍历

private static void printNode(TreeNode root) {

LinkedList> queue =new LinkedList>();

    if(root!=null){

queue.add(root);

    }

while(!queue.isEmpty()){

root = queue.getFirst();

        System.out.print(root.data+"  ");

        queue.removeFirst();

        if(root.left!=null){

queue.add(root.left);

        }

if(root.right!=null){

queue.add(root.right);

        }

}

}

}

个人公号:【排骨肉段】,可以关注一下。

相关文章

  • 二叉树 基础操作

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

  • 关于二叉树的算法题

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

  • 二叉树遍历

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

  • 二叉树操作

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

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

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

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

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

  • 二叉树的遍历

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

  • 前端二叉树

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

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

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

  • leetcode 144 145 94

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

网友评论

      本文标题:二叉树遍历

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