二叉树的遍历(先序,中序,后序,层序)

数据结构里,我们都学过二叉树,二叉树的遍历分为先序遍历,中序遍历和后序遍历,还有相对不常用的层序遍历。
先序遍历:先遍历根再遍历左子树再遍历右子树
中序遍历:先遍历左子树再遍历根再遍历右子树
后序遍历:先遍历左子树再遍历右子树再遍历根
层序遍历:把一棵二叉树按照从左到右,从上到下的顺序遍历,以层来分
例如:有这么一棵树
在这里插入图片描述
那么这棵树的先序,中序,后序的遍历依次为
先序:ABDHECFIG
中序:HDBEAFICG
后序:HDEBIFGCA
层序:ABCDEGFHI

那么实现二叉树遍历的代码如下:

import java.util.Arrays;
import java.util.List;

public class Trees { //在这里是构建一棵树,以便检验代码的正确性
public static Node buildTrees(){
Node a = new Node(‘A’);
Node b = new Node(‘B’);
Node c = new Node(‘C’);
Node d = new Node(‘D’);
Node e = new Node(‘E’);
Node f = new Node(‘F’);
Node g = new Node(‘G’);
Node h = new Node(‘H’);
Node i = new Node(‘I’);

    a.left = b;a.right = c;
    b.left = d;b.right = e;
    c.left = f;c.right = g;
    d.left = h;d.right = null;
    e.left = null;e.right = null;
    f.left = null;f.right = i;
    g.left = null;g.right = null;
    h.left = null;h.right = null;
    i.left = null;i.right = null;

    return a;
}
public static void preOrderTraversal(Node root){
    if(root == null){
        return ;
    }
    System.out.println(root.value);
    preOrderTraversal(root.left);
    preOrderTraversal(root.right);
}
public static void inOrderTraversal(Node root){
    if(root == null){
        return;
    }
    inOrderTraversal(root.left);
    System.out.println(root.value);
    inOrderTraversal(root.right);
}
public static void postOrderTraversal(Node root){
    if(root == null){
        return;
    }
    postOrderTraversal(root.left);
    postOrderTraversal(root.right);
    System.out.println(root.value);
}
public static void main(String[] args){
    Node root = buildTrees();
    preOrderTraversal(root);
    System.out.println("----------------------------------");
    inOrderTraversal(root);
    System.out.println("----------------------------------");
    postOrderTraversal(root);
    System.out.println("----------------------------------");
}

}

打印结果如下图:
在这里插入图片描述
上面是先序,中序和后序,然后层序在下面:
代码:
class solution {
public static void levelOrderTraversal(TreeNode root) {
if (root == null) {
return;
}
Queue queue = new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
TreeNode front = queue.poll();
System.out.println(front.value);
if(front.left!=null){
queue.add(front.left);
}
if(front.right!=null){
queue.add(front.right);
}
}
}
public static TreeNode buildTrees(){
TreeNode a = new TreeNode(‘A’);
TreeNode b = new TreeNode(‘B’);
TreeNode c = new TreeNode(‘C’);
TreeNode d = new TreeNode(‘D’);
TreeNode e = new TreeNode(‘E’);
TreeNode f = new TreeNode(‘F’);
TreeNode g = new TreeNode(‘G’);
TreeNode h = new TreeNode(‘H’);
TreeNode i = new TreeNode(‘I’);

    a.left = b;a.right = c;
    b.left = d;b.right = e;
    c.left = f;c.right = g;
    d.left = h;d.right = null;
    e.left = null;e.right = null;
    f.left = null;f.right = i;
    g.left = null;g.right = null;
    h.left = null;h.right = null;
    i.left = null;i.right = null;

    return a;
}
public static void main(String[]args){
     TreeNode root = buildTrees();
    levelOrderTraversal(root);

}

}

(还是同一棵树)
结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值