当我使用 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 再次迭代......无限迭代树。