Leetcode问题:https://leetcode.com/problems/binary-tree-level-order-traversal/
我有两个队列,我清空第一个队列(q),同时向第二个队列(q2)添加元素,这样我可以得到级别。当第一个队列为空时,我将其传递给函数以创建该级别的ArrayList并将其添加到结果值中,如果q2为空,则意味着没有添加任何内容,因此我们可以中断循环并返回函数。我必须手动添加第一个节点。问题是只添加了中间层,而没有添加其他层。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
if(root == null) {
return null;
}
List<List<Integer>> returnList = new ArrayList<>();
Queue<TreeNode> q = new LinkedList<>();
q.add(root);
List<Integer> tempList = new ArrayList<>();
tempList.add(root.val);
returnList.add(tempList);
while(true) {
Queue<TreeNode> q2 = new LinkedList<>();
while(!q.isEmpty()) {
TreeNode node = q.remove();
if(node.left != null) {
q2.add(node.left);
}
if(node.right != null) {
q2.add(node.right);
}
}
if(q2.isEmpty()) {
break;
}
q = q2;
addList(returnList, q2);
}
return returnList;
}
public static void addList(List<List<Integer>> returnList, Queue<TreeNode> q2) {
List<Integer> tempList = new ArrayList<>();
int size = q2.size();
for(int i = 0; i < size; i++) {
int val = q2.remove().val;
System.out.println(val);
tempList.add(val);
}
returnList.add(tempList);
}
}
问题涉及代码的这一部分:
q = q2;
addList(returnList, q2);
函数addList
将清空给定队列q2
,并对其调用remove
。由于q
已成为对同一队列的引用,您已清空q
,因此外循环的下一次迭代将不会进入内循环,并以中断退出外循环。
为避免发生这种情况,请确保
remove
调用未在q
上执行:复制:
q = new LinkedList<>(q2);
addList(returnList, q2);
或者,或者:
q = q2;
addList(returnList, new LinkedList<>(q2));
我正在尝试实现一个levelOrder函数,它接受树的指针并逐级打印树的数据。这是《C如何编程》一书中的一个问题,完整问题如下: (级序二叉树遍历)Fig的程序。12.19说明了遍历二叉树的三种递归方法——顺序遍历、前序遍历和后序遍历。此练习演示了二叉树的级别顺序遍历,其中节点值从根节点级别开始逐级打印。每个级别上的节点从左到右打印。级序遍历不是递归算法。它使用队列数据结构来控制节点的输出。算法如
我必须创建两个类:NonBinaryTree和SingleNode类,包含一些处理节点和整个树的方法(在NonBinaryTree类中)。我在使用队列(先进先出类型)实现非二叉树的BFS(层次顺序)遍历时遇到过问题。由于二叉树有很多资源,每个节点最多有两个子节点,我还没有找到任何可以帮助我解决非二叉树问题的资源。 到目前为止,我做了这个代码: 我的树: 在此处输入图像描述 我需要按以下顺序处理节点
我试图使用队列的链表实现实现二叉搜索树的级别顺序遍历。 我已经检查了二叉查找树的实现,它是好的。队列的链表实现也是正确的。在这里,我试图访问节点并将其子节点排队。然后使用弹出函数实际访问节点。 这最终是通过递归调用完成的。当我运行以下代码时,我以不同的顺序获得输出。
这是一个leetcode问题。 给定一个二叉树,返回其节点值的级序遍历(即从左到右,逐级)。 例如:给定二叉树, 将其级别顺序遍历返回为: 但我正在用JavaScript尝试一种新的方式,而不是完全按照他们的解决方案。到目前为止,我能够打印阵列,但 如何在新行中打印不同的级别 以下是我目前的代码: 输入:[3,9,20,空,空,15,7], LeetCode问题链接:BinarytreeTrave
我正在尝试对二叉树进行级别顺序遍历。但诀窍是代替正常的级别顺序遍历,我想做另一种选择。对于例如。 普通等级顺序遍历 : 我要找的是我们打印根。现在,对于每一个偶数级,我都想逆时针旋转,对于每奇数级,都会顺时针旋转: 对于这种遍历,输出应该是: 这是我到目前为止尝试的,但这产生的输出与我试图实现的输出略有不同: 该程序产生以下输出: < code>1 3 2 5 4 7 6 10 11 9 8 我需
为了上课,我必须创建一个状态对象的二叉树,每个状态对象包括一个居民对象的二叉树,这些居民对象组织住在每个州的人。我试图在一个给定的州中搜索最老的居民;然而,居民是按字母顺序组织在树中的,这对我的搜索毫无帮助。因此,我必须遍历整个居民树,更新保存最老的人的节点,并在树被完全遍历后返回它。我已经有了代码的第一部分,但是还停留在如何写递归的剩余部分。 状态树的方法: 然后是公共“包装器”状态树方法: