【发布时间】:2020-11-25 14:25:10
【问题描述】:
关于通过顺序遍历验证 BST 的一个简单问题
public boolean isValidBST(TreeNode root) {
if (root == null) return true;
Stack<TreeNode> stack = new Stack<>();
TreeNode pre = null;
while (root != null || !stack.isEmpty()) {
while (root != null) {
stack.push(root);
root = root.left;
}
root = stack.pop();
if(pre != null && root.val <= pre.val) return false;
pre = root;
root = root.right;
}
return true;
}
冒着听起来很傻的风险,倒数第二行 root = root.right 的意义何在,因为它不会在 while 循环的下一次迭代之后立即重新分配给 root = stack.pop()?
【问题讨论】:
-
内部while循环将首先通过左孩子下降。
-
我知道。我的问题是 root = root.right 有什么意义?
-
你必须以某种方式找到合适的孩子。
-
但是当你声明 root = stack.pop() 时它不会立即被替换吗?
-
只有当它为空时。
标签: algorithm binary-search-tree inorder