当我使用 while 循环而不是 if 我得到 TLE 错误时
When I use while loop instead of if I get TLE error
这是二叉树中序遍历的简单代码。我只是有点怀疑,如果我在这里使用 while
而不是 if
,我会得到一个 TLE 错误。我想知道什么情况下会卡住?
(我知道我们使用 if
条件并且递归不应该在这里使用 while
,但只是为了理解我想知道)
能否请您举个小例子来解释一下,以这棵小树为循环中会被击中的位置?
1
/ \
2 3
void inorder(Node root) {
**while** (root != null) {
inorder(root.left);
count++;
inorder(root.right);
}
}
树的根永远不会为空。因此,即使您遍历并遍历整棵树并将其 returns 返回到 inorder
方法的初始调用,根永远不会为 null 并且 while 循环将再次执行,从而无限遍历树.
举个例子,从1开始,然后到2,再到3。根的第一次迭代就完成了。但是由于根永远不会为空,它将通过转到 2 然后 3 再次迭代......无限迭代树。
这是二叉树中序遍历的简单代码。我只是有点怀疑,如果我在这里使用 while
而不是 if
,我会得到一个 TLE 错误。我想知道什么情况下会卡住?
(我知道我们使用 if
条件并且递归不应该在这里使用 while
,但只是为了理解我想知道)
能否请您举个小例子来解释一下,以这棵小树为循环中会被击中的位置?
1
/ \
2 3
void inorder(Node root) {
**while** (root != null) {
inorder(root.left);
count++;
inorder(root.right);
}
}
树的根永远不会为空。因此,即使您遍历并遍历整棵树并将其 returns 返回到 inorder
方法的初始调用,根永远不会为 null 并且 while 循环将再次执行,从而无限遍历树.
举个例子,从1开始,然后到2,再到3。根的第一次迭代就完成了。但是由于根永远不会为空,它将通过转到 2 然后 3 再次迭代......无限迭代树。