首页 > 解决方案 > 当我使用 while 循环而不是如果我得到 TLE 错误

问题描述

这是用于按顺序遍历二叉树的简单代码。我只是有一个小小的疑问,如果我使用while而不是if这个,我会得到一个 TLE 错误。我想知道在什么情况下会卡住?

(我知道我们使用if条件和递归不应该while在这里使用,但只是为了理解我想知道)

你能用一个小例子来解释一下,把这棵小树作为这个循环中会被击中的地方吗?

    1
   / \
  2   3
   void inorder(Node root) {
       **while** (root != null) {
           inorder(root.left);
           count++;
           inorder(root.right);
       }
   }

标签: javabinary-tree

解决方案


树的根永远不会为空。因此,即使您迭代并遍历整个树并返回到inorder方法的初始调用,根永远不会为 null,while 循环将再次执行,从而无限地遍历树。

例如,它从 1 开始,然后到 2,然后到 3。根的第一次迭代完成。但由于根永远不会为空,它将通过 2 然后 3 再次迭代......无限迭代树。


推荐阅读