本文介绍: 先将root节点放入队列中,每次都弹出队头节点,取出节点,然后将取出节点的left节点和right节点依次放入到队列中,直到没有节点再能放入到队列中为止(即:队列为空)。本题是要层级遍历二叉树,将每层的所有节点都存入到list中。表示为下一层的最后一个节点,这个变量每次从队列中取出节点都会进行更新,当弹出节点等于。接替围绕着这两个点,首先可以使用队列来层级遍历每个节点,思路类似于。时,即可将一层的list存入总的list,且将。(即逐层地,从左到右访问所有节点)。表示为当前层的最后一个节点,
102.二叉树的层序遍历
给你二叉树的根节点 root
,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
示例 2:
输入:root = [1]
输出:[[1]]
示例 3:
输入:root = []
输出:[]
提示:
- 树中节点数目在范围
[0, 2000]
内 -1000 <= Node.val <= 1000
本题是要层级遍历二叉树,将每层的所有节点都存入到list中。主要存在两个需要解决的点。
- 如何层级遍历二叉树
- 如何知道每层有哪些节点
接替围绕着这两个点,首先可以使用队列来层级遍历每个节点,思路类似于宽度优先搜索(bfs),先将root节点放入队列中,每次都弹出队头节点,取出节点,然后将取出节点的left节点和right节点依次放入到队列中,直到没有节点再能放入到队列中为止(即:队列为空)。
随后再此基础上,创建变量lastNode
表示为当前层的最后一个节点,nextLastNode
表示为下一层的最后一个节点,这个变量每次从队列中取出节点都会进行更新,当弹出节点等于lastNode
时,即可将一层的list存入总的list,且将lastNode
更新为nextLastNode
。
代码实现如下:
public static List<List<Integer>> levelOrder(TreeNode root) {
if (root == null) {
return new ArrayList<>();
}
List<List<Integer>> res = new ArrayList<>();
TreeNode lastNode = root;
TreeNode nextLastNode = null;
Queue<TreeNode> queue = new ArrayDeque<>();
List<Integer> list = new ArrayList<>();
queue.add(root);
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
list.add(node.val);
if (node.left != null) {
nextLastNode = node.left;
queue.add(node.left);
}
if (node.right != null) {
nextLastNode = node.right;
queue.add(node.right);
}
if (lastNode == node) {
res.add(list);
list = new ArrayList<>();
lastNode = nextLastNode;
}
}
return res;
}
原文地址:https://blog.csdn.net/weixin_41249051/article/details/136000440
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_65027.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。