LeetCode-102-二叉树的层序遍历
二叉树的层序遍历
题目描述:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例说明请见LeetCode官网。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一:利用队列遍历二叉树
队列的特点是先进先出,所以利用队列来遍历二叉树实现层序遍历,具体过程如下:
- 首先,如果root为空,直接返回空的List。
 - 如果root不为空,声明一个队列nodes,将root节点加入到队列中,声明一个result,然后遍历nodes中的节点,遍历过程如下:
 
- 首先,用count记录当前队列中节点的数量,即为当前层节点的数量,vals记录当前节点的值;
 - 从nodes中按顺序取出count个节点,并且将相应的节点值放入vals中,同时如果当前节点的左右子节点不为空,按从左到右的顺序放入nodes中。然后将vals加入到结果result中。
 - 重复遍历nodes中的节点,直到nodes为空。
 - 最后返回result即为层序遍历的结果。
 
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class LeetCode_102 {
    /**
     * 利用队列遍历二叉树:队列的特性是先进先出
     * @param root
     * @return
     */
    public static List<List<Integer>> levelOrder(TreeNode root) {
        if (root == null) {
            return new ArrayList<>();
        }
        List<List<Integer>> result = new ArrayList<>();
        // 暂存每一行的节点
        Queue<TreeNode> nodes = new LinkedList<>();
        nodes.add(root);
        while (!nodes.isEmpty()) {
            // 每次遍历一行数据
            List<Integer> vals = new ArrayList<>();
            int count = nodes.size();
            while (count > 0) {
                TreeNode curNode = nodes.poll();
                vals.add(curNode.val);
                // 将当前节点的左右子节点从左到右放入队列
                if (curNode.left != null) {
                    nodes.add(curNode.left);
                }
                if (curNode.right != null) {
                    nodes.add(curNode.right);
                }
                count--;
            }
            result.add(vals);
        }
        return result;
    }
    public static void main(String[] args) {
        TreeNode root = new TreeNode(3);
        root.left = new TreeNode(9);
        root.right = new TreeNode(20);
        root.right.left = new TreeNode(15);
        root.right.right = new TreeNode(7);
        for (List<Integer> integers : levelOrder(root)) {
            for (Integer integer : integers) {
                System.out.print(integer + " ");
            }
            System.out.println();
        }
    }
}
【每日寄语】 虚心使人进步,骄傲使人落后。
LeetCode-102-二叉树的层序遍历的更多相关文章
- LeetCode 102. 二叉树的层序遍历 | Python
		
102. 二叉树的层序遍历 题目来源:https://leetcode-cn.com/problems/binary-tree-level-order-traversal 题目 给你一个二叉树,请你返 ...
 - leetcode 102二叉树的层序遍历
		
5月20更新: 使用借助队列实现bfs,定义len记录队列的尺寸直接进行遍历层序 /** * Definition for a binary tree node. * struct TreeNode ...
 - LeetCode 102. 二叉树的层次遍历(Binary Tree Level Order Traversal) 8
		
102. 二叉树的层次遍历 102. Binary Tree Level Order Traversal 题目描述 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 每 ...
 - leetcode之二叉树的层序遍历
		
1.题目描述 2.题目分析 二叉树的层序遍历主要算法思想是使用 队列这一数据结构实现,这个数据结构多应用在和 图相关的算法.例如图的广度优先遍历就可以使用队列的方法实现.本题的关键在于如何识别出一层已 ...
 - Java实现 LeetCode 102 二叉树的层次遍历
		
102. 二叉树的层次遍历 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 2 ...
 - leetcode 102. 二叉树的层次遍历 及 103. 二叉树的锯齿形层次遍历
		
102. 二叉树的层次遍历 题目描述 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / ...
 - Leetcode 102 二叉树的层次遍历 Python
		
二叉树的层次遍历 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 ...
 - LeetCode 102 二叉树的层次遍历
		
题目: 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 ...
 - LeetCode 102 ——二叉树的层次遍历
		
1. 题目 2. 解答 定义一个存放树中数据的向量 data,一个存放树的每一层数据的向量 level_data 和一个存放每一层节点的队列 node_queue. 如果根节点非空,根节点进队,然后循 ...
 - 五三想休息,今天还学习,图解二叉树的层序遍历BFS(广度优先)模板,附面试题题解
		
壹 ❀ 引 我在从JS执行栈角度图解递归以及二叉树的前.中.后遍历的底层差异一文中,从一个最基本的数组遍历引出递归,在掌握递归的书写规则后,又从JS执行栈角度解释了二叉树三种深度优先(前序.中序后序) ...
 
随机推荐
- python 小兵(6)函数进阶
			
阅读目录 函数参数-动态参数 名称空间 函数的嵌套 gloabal.nonlocal 回到顶部 函数参数-动态参数 之前我们说过传参,如果我们在传参数的时候不很清楚有哪些的时候,或者说给一个函数传了很 ...
 - c++17 新特性
			
编译环境说明:gcc 8.1 + eclipse +windows 10 eclipse cpp默认支持c++14,做c++17开发时,需要手动进行配置. 1.关键字 1)constexpr c++1 ...
 - AT2401 [ARC072C] Alice in linear land
			
基于观察,可以发现这样一条性质: 我们并不关心当前位置和终点的绝对关系,只在乎当前位置和终点的距离,当这个距离确定的时候接下来能走到的位置也是确定的. 基于这个观察可以发现,本质上每个位置的状态就是和 ...
 - Mysql Json函数总览 (一)
			
JSON函数相关文章均来自官网,此处仅做记录,以便以后查询方便. https://dev.mysql.com/doc/refman/5.7/en/json-functions.html JSON函数参 ...
 - centOs7.2安装cmake
			
最新的3.15的安装不上 wget https://cmake.org/files/v3.5/cmake-3.5.2.tar.gz tar xvf cmake-3.5.2.tar.gz cd cmak ...
 - 简单RSA攻击方式
			
RSA攻击方式总结 1.模数分解 1).解题思路  a).找到RSA算法中的公钥(e,n)  b).通过n来找到对应的p和q,然后求得φ(n)  c).通过gmpy2.invert或者gmpy2 ...
 - 2021江西省赛线下赛赛后总结(Crypto)
			
2021江西省赛线下赛 crypto1 题目: from random import randint from gmpy2 import * from Crypto.Util.number impor ...
 - 总结haproxy各调度算法的实现方式及其应用场景
			
一.静态算法 1.1 static-rr 基于权重的轮询调度,不支持运行时利用socat进行权重的动态调整(只支持0和1,不支持其它值)及后端服务器慢启动,其后端主机数量没有限制,相当于LVS中的 w ...
 - PTM人员(产品技术经理)
			
以下是一位PTM的工作总结: 责任感 作为PTM一定要有责任感,项目中的所有事情都要作为自己的事情,如果碰到有些项目中的工作没人负责,那么就是PTM的工作没有做到位. 全局观 作为PTM一定要比普 ...
 - Puppeteer简介
			
puppeteer常用API https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md Puppeteer是一个node库,他 ...