这是leetcode问题#102。这个问题的leetcode描述是:给定一个二叉树,返回其节点值的级别顺序遍历。(即,从左到右,逐级)。
所以给一棵像树一样的树
3
/ \
9 20
/ \
15 7
应该返回
[
[3],
[9,20],
[15,7]
]
我的代码在下面
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
if(root == null) return new ArrayList<List<Integer>>();
Queue<TreeNode> list = new LinkedList<TreeNode>();
List<List<Integer>> res = new ArrayList<List<Integer>>();
list.add(root);
while(!list.isEmpty()){
int size = list.size();
List<Integer> temp = new ArrayList<Integer>();
while(size != 0){
root = list.remove();
if(root.left != null) list.add(root.left);
if(root.right != null) list.add(root.right);
temp.add(root.val);
size--;
res.add(temp);
}
}
return res;
}
}
为什么当我在第二个while循环中离开res.add(temp)时,它返回的答案是:[[3],[9,20],[9,20],[15,7],[15,7]]
但是当我把res.add(temp)放在第二个while循环的外部,而放在第一个while循环的内部时,我得到了正确的答案。另外,如果这篇文章的格式很糟糕,或者如果我写这篇文章的时间比我应该写的要长很多,我也很抱歉,因为我还没有在stackoverflow上发布问题。非常感谢。
因为第一个循环通过级别(级别是list
的当前内容):
3 one list for level 0: [3]
/ \
9 20 one list for level 1: [9, 20]
/ \
15 7 one list for level 2: [15, 7]
第二个循环通过每个级别上的节点(root
是当前节点):
3 one list for "3": [3]
/ \
9 20 one list for "9" [9, 20], the same list for "20": [9, 20]
/ \
15 7 one list for "15" [15, 7], the same list for "7" [15, 7]
您可以输出list
和root
的当前值,以帮助您可视化算法:
while(!list.isEmpty()){
System.out.println("First loop. Current level: "+list);
int size = list.size();
List<Integer> temp = new ArrayList<Integer>();
while(size != 0) {
root = list.remove();
System.out.println("Second loop. Current node: "+root);
if(root.left != null) list.add(root.left);
if(root.right != null) list.add(root.right);
temp.add(root.val);
size--;
res.add(temp);
}
}
我想逐级显示树结构。我当前的代码执行BFS或级别顺序遍历,但我无法使输出像树一样显示树结构。请参阅当前输出和预期输出。 我的想法是使用某种计数来迭代队列中同一级别的元素。 我怎么能这样做呢。 没有此功能的原始代码可以在下面的链接中找到,以防有人需要整个实现,否则只需查看下面的显示BFS功能。 java中泛型树(n元树)的级顺序遍历 谢谢 另外,我之前发布了一个具有相同功能的逻辑问题,因为已经回答了
我正在尝试对二叉树进行级别顺序遍历。但诀窍是代替正常的级别顺序遍历,我想做另一种选择。对于例如。 普通等级顺序遍历 : 我要找的是我们打印根。现在,对于每一个偶数级,我都想逆时针旋转,对于每奇数级,都会顺时针旋转: 对于这种遍历,输出应该是: 这是我到目前为止尝试的,但这产生的输出与我试图实现的输出略有不同: 该程序产生以下输出: < code>1 3 2 5 4 7 6 10 11 9 8 我需
(为了避免冗长的解释,我所要寻找的只是java中泛型树(n元树)的级别顺序遍历。提供的代码正常工作,需要级别顺序显示功能。环顾四周一个小时,但找不到通用n元树的参考。如果soemone能帮助我在代码上构建LevelOrderDisplay函数,我将不胜感激,因为它将帮助我理解我遇到的队列错误。谢谢 我一直在尝试在工作中实现Autosys作业计划的树表示。由于每个作业(流程)可以有一个或多个依赖作业
二叉树的预序遍历是{8,5,9,7,1,12,4,11,3},其顺序是{9,5,1,7,12,8,4,3,11}。用它构造二叉树并执行级别顺序遍历。最后构造一个二叉搜索树(BST),从左到右依次获取在上述级别顺序遍历中出现的键值。这个BST的级别顺序遍历是什么?
我正在尝试对二叉搜索树进行一次级别顺序遍历,并在多维数组中返回最终结果。例如,如果根节点是,而级别1的节点是,那么它应该从代码返回作为。我是数据结构方面的新手,也没有使用函数的命令。任何帮助都将不胜感激。谢谢:)
我必须创建两个类:NonBinaryTree和SingleNode类,包含一些处理节点和整个树的方法(在NonBinaryTree类中)。我在使用队列(先进先出类型)实现非二叉树的BFS(层次顺序)遍历时遇到过问题。由于二叉树有很多资源,每个节点最多有两个子节点,我还没有找到任何可以帮助我解决非二叉树问题的资源。 到目前为止,我做了这个代码: 我的树: 在此处输入图像描述 我需要按以下顺序处理节点