二叉树的层次遍历

作者: 林天涯 | 来源:发表于2017-12-31 17:36 被阅读0次

前言


对于二叉树来说,层次遍历可以说是很平常的,但由于其应用广泛,比如可以用来求二叉树的高度和宽度,因而非常重要。对于任何一个程序员来说掌握都是必须的。

思路


非常简单,利用队列来进行遍历。初始若根结点不为空则将其入队,在队列不为空下进行循环,出队一个元素并访问他,若其左孩子不空,将其左孩子入队。若其右孩子不空,将其右孩子入队。如此进行下去直到队列为空,遍历结束。

Codes


/**
 * 定义二叉树结构
 * @author Fairy2016
 *
 */
class BiTree {
    int data;
    BiTree lchild;
    BiTree rchild;
}
/**
 * 定义队列结构
 * @author Fairy2016
 *
 */
class Queue {
    BiTree data[];
    int front;
    int rear;
}
/**
 * 二叉树层次遍历算法
 * @author Fairy2016
 *
 */
public class LayerThrough {
    //根据给定序列,建立完全二叉树
    public static BiTree CreateCompleteBiTree(int a[], int n) {
        BiTree nodes[] = new BiTree[n];
        //初始化各结点
        for(int i = 0; i < n; i++) {
            nodes[i] = new BiTree();
            nodes[i].data = a[i];
            nodes[i].lchild = nodes[i].rchild = null;
        }
        //将各结点按照完全二叉树的关系连起来(其实就是奇左偶右)
        for(int i = 1; i <= n/2; i++) {
            nodes[i-1].lchild = nodes[2*i-1];
            if(2*i < n) {
                nodes[i-1].rchild = nodes[2*i];
            }
        }
        //返回根结点
        return nodes[0];
    }
    //层次遍历
    public static void LayerOrder(BiTree T) {
        if(T == null) {
            return;
        }
        //队列初始化
        Queue Q = new Queue();
        Q.front = Q.rear = -1;
        Q.data = new BiTree[100];
        Q.data[++Q.rear] = T;//根结点入队
        while(Q.rear != Q.front) {
            BiTree p = Q.data[++Q.front];//出队
            System.out.print(p.data+" ");//访问
            if(p.lchild != null) {
                Q.data[++Q.rear] = p.lchild;//左孩子入队
            }
            if(p.rchild != null) {
                Q.data[++Q.rear] = p.rchild;//右孩子入队
            }
        }
    }
    public static void main(String args[]) {
        int a[] = {1,2,3,4,5,6,7,8};
        int n = 8;
        BiTree T = CreateCompleteBiTree(a, n);
        LayerOrder(T);
    }
}

相关文章

  • 二叉树的蛇形层次遍历(LeetCode.103)

    题目 解析 首先参考二叉树的层次遍历层次遍历二叉树(LeetCode--102二叉树的层次遍历)[https://...

  • 二叉树遍历

    二叉树遍历(非递归写法) 先序遍历 中序遍历 后序遍历 层次遍历 给定一个二叉树,返回其按层次遍历的节点值。 (即...

  • 二叉树的基本算法

    一、二叉树的递归遍历 二、二叉树的层次遍历 二叉树的层次遍历是指二叉树从上到下,从左到右遍历数据。同一层中的节点访...

  • 二叉树的层次遍历

    三道层次遍历题,同一个模板,这边用到的是两个队列 二叉树的层次遍历 LeetCode题目地址 二叉树的层次遍历 加...

  • 二叉树的层次遍历

    一、二叉树的层次遍历原理 如图所示为二叉树的层次遍历,即按照箭头所指方向,按照1、2、3、4的层次顺序,对二叉树中...

  • 二叉树 基础操作

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

  • 数据结构重学日记(二十二)二叉树的层次遍历

    二叉树的层次遍历也属于非递归遍历,和之前先序、中序、后序遍历的区别在于层次遍历需要借助队列来实现。 层次遍历的操作...

  • 二叉树遍历

    1.层次遍历(广度优先遍历) 用队列实现,队首出队,队首的子节点入队。 1,二叉树的层次遍历, 打印 2,二叉树的...

  • 力扣题解(树)

    100. 相同的树 101. 对称二叉树 102. 二叉树的层次遍历 103. 二叉树的锯齿形层次遍历 104. ...

  • 二叉树的各种遍历方法

    二叉树的常用遍历方法 二叉树常用的遍历方法包括: 前序遍历 中序遍历 后序遍历 层次遍历 而前三种遍历的具体实现上...

网友评论

    本文标题:二叉树的层次遍历

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