二叉树的层次遍历

思路:二叉树的遍历分为前序遍历、中序遍历和后序遍历。这是我们学习二叉树需要掌握的最基础的三个操作。那么除了前中后序遍历以外,还有一种层次遍历,即将树的某节点和它的兄弟节点所在位置称为一层。如图所示:


image.png

我们假设从左往右的方向进行访问,层次遍历结果为:A B C D E F G H I 。
为了完成这样的遍历,需要准备一个辅助队列Queue

首先将根节点入队:


image.png

首先判断队列是否为空(这个时候肯定是不空的,根节点被放进去了),如果为空跳出循环。如果队列不为空,出队一个节点进行访问并判断是否有左子节点或者右子节点,如果有就将子节点入队;(注意:这个顺序如果颠倒 即右子节点先入队就是从右向左访问了)就变成了这个样子。


image.png

ok,以此类推,B出队以后会变成这样:
image.png

思路已经了解了,代码实现如下:
节点类:

public class BinaryTreeNode {

    private int no;
    private String info;
    private BinaryTreeNode left;
    private BinaryTreeNode right;
//省略set get 构造器等...
}

层次遍历方法:

public void levelList(){
        if(heroNode==null){
            return;
        }
        ArrayDeque<BinaryTreeNode> arrayDeque = new ArrayDeque();
        arrayDeque.add(heroNode);
        while (!arrayDeque.isEmpty()){
            BinaryTreeNode node = arrayDeque.poll();
            System.out.println(node.toString());
            if(node.getLeft()!=null){
                arrayDeque.add(node.getLeft());
            }
            if(node.getRight()!=null){
                arrayDeque.add(node.getRight());
            }
        }
    }
public class TestBinaryTree {
    public static void main(String[] args) {
        BinaryTreeNode binaryTreeNode = new BinaryTreeNode(1,"hu");
        BinaryTreeNode binaryTreeNode2 = new BinaryTreeNode(2,"shi");
        BinaryTreeNode binaryTreeNode3 = new BinaryTreeNode(3,"chen");
        BinaryTreeNode binaryTreeNode4 = new BinaryTreeNode(4,"guo");
        BinaryTreeNode binaryTreeNode5 = new BinaryTreeNode(5,"liu");
        
        binaryTreeNode.setLeft(binaryTreeNode2);
        binaryTreeNode.setRight(binaryTreeNode3);
        binaryTreeNode3.setLeft(binaryTreeNode4);
        binaryTreeNode3.setRight(binaryTreeNode5);
        
        BinaryTreeUtil binaryTreeUtil = new BinaryTreeUtil(binaryTreeNode);

        binaryTreeUtil.levelList();

    }
}
image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 数据结构第12讲 二叉树的层次遍历 二叉树的遍历一般有先序遍历、中序遍历和后序遍历,这三种遍历比较简单。今天我们讲...
    rainchxy阅读 9,001评论 0 1
  • 题目给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。 例如:给定二叉树: [3,9...
    HITZGD阅读 4,021评论 0 0
  • 定义 将二叉树按层打印,每层从左到右 思路 利用队列(Queue)先进先出特性,将本层出队列,下一层入队列 步骤 ...
    BestbpF阅读 5,192评论 0 1
  • 107 Binary Tree Level Order Traversal II 二叉树的层次遍历 II Desc...
    air_melt阅读 2,144评论 0 0
  • 青春斗里,最大的感触莫过于一种象牙塔似的真实。回想曾经的自己,也似乎许久不提当年勇。后来大概就是除却了一种怕输的勇...
    尹夏冬阅读 1,488评论 0 1