一、知识点:
二叉树、中序遍历、栈
二、文字分析:
使用了中序遍历的迭代实现。我们使用一个栈来辅助遍历二叉树。将当前节点的左子树依次压入栈中,直到叶子节点。然后从栈中弹出节点,如果节点的值小于等于前一个节点的值,则不是有效的二叉搜索树,返回 false。否则,将当前节点设置为前一个节点,并处理当前节点的右子树。通过这种方式,我们能够按照递增顺序访问二叉树的节点。如果遍历完整个二叉树后没有发现非递增的节点值,那么该二叉树是有效的二叉搜索树,返回 true。
时间复杂度为O(N),空间复杂度为O(N)。
三、编程语言:
java
四、正确代码:
import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * public TreeNode(int val) { * this.val = val; * } * } */ public class Solution { public boolean isValidBST(TreeNode root) { if (root == null) { return true; } Stack<TreeNode> stack = new Stack<>(); TreeNode current = root; TreeNode prev = null; while (current != null || !stack.isEmpty()) { while (current != null) { stack.push(current); current = current.left; } current = stack.pop(); if (prev != null && current.val <= prev.val) { return false; } prev = current; current = current.right; } return true; } }