直接回答

判断是否为二叉搜索树,不能只比较节点与左右孩子的大小,必须保证左子树所有节点小于根、右子树所有节点大于根。标准做法是递归传递合法取值区间:根节点区间 (-∞, +∞),左孩子区间上限更新为根值,右孩子区间下限更新为根值,逐层收紧校验。

展开解析

常见错误解法是仅检查 node.left.val < node.val < node.right.val——反例:左孩子的右孙节点可能比根大。区间法递归写法:isValid(node, lo, hi),要求 lo < node.val < hi,再递归左右子树。另一种等价做法是中序遍历:BST 的中序序列严格递增,遍历时记录前驱值,出现 ≤ 前驱即非法;迭代中序可省递归栈。关于等值:多数题目定义 BST 不允许重复,故用严格不等号,若允许重复要按题目约定处理。易错点:区间初值用整数最小/最大值(INT_MIN/INT_MAX)时节点值可能恰好等于边界,建议用 None 表示无穷或用 long 类型。追问:如何找 BST 中第 K 小(中序计数)、BST 与平衡树的关系。