二叉树的层序遍历

牛客网链接: link.
1.题目描述:
从上往下打印出二叉树的每个节点,同层节点从左至右打印
2.思路
在这里插入图片描述
对于这样的一棵二叉树 层序遍历的时候
先访问A结点,
再访问B结点, C结点, (这里的B和C是A结点的左右子树的根结点)
再访问D结点, E结点, F结点, G结点, (结点D和E是根节点为B的左右子树的根结点, 结点F和G是根节点为C二叉树的左右子树的根节点)
再访问H结点, I结点(…)

从上面的分析中, 我们可以看出在
第一层的时候, 我们先访问根节点(A)
第二层就访问的是第一层根节点的左右子树的根结点(BC)
到第三层访问的是第二层是第一层根结点的左子树的根结点的左右子树的根结点, 再访问的是第一层根结点的左子树的根结点的左右子树的根结点(DEFG)… 以此类推, 像这样的一个顺序,可以让我们联想到队列的一个特性(先进先出), 下面我就写一下代码实现大概步骤

  1. 循环判断队列是否为空,不空执行步骤1,2,3, 空则返回, 说明遍历结束
  2. 从队列的队首中取出结点
  3. 访问结点
  4. 把结点的左右子树入队(这里要判断左右子树是否为空, 为空则不入队列)

3.代码实现

import java.util.ArrayList;
import java.util.Queue;
import java.util.LinkedList;
/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
        ArrayList<Integer> result = new ArrayList<>();//存放结果
        if (root == null) {
            return result;
        }
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while (!queue.isEmpty()) {
            //1.先拿到结点
            TreeNode node = queue.poll();
            //2.访问结点
            result.add(node.val);
            //3.把结点的左右子树入队
            if (node.left != null) {
                queue.offer(node.left);
            }
            if (node.right != null) {
                queue.offer(node.right);
            }
        }
        return result;
    }
}

个人的一些思路,仅供参考, 大家有问题,欢迎指出, 一起讨论学习、共同进步.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值