判断是否为二插搜索树,即当前节点满足 左子结点 < 当前节点 < 右子结点,且所有的节点均满足, 递归遍历所有结点,直到节点为空; 遍历时对于未知节点以无穷值代替,如 root.left 向 left 分支时, 其 left 节点的值为 float("-inf"); root.right 向 right 分支时, 其 right 节点的值为 float("inf")。 代码如下:
class Solution:
def isValidBST(self , root: TreeNode) -> bool:
# write code here
return self.valid_bst(root, TreeNode(float("-inf")), TreeNode(float("inf")))
def valid_bst(self, root: TreeNode, left: TreeNode, right: TreeNode) -> bool:
if not root:
return True
if root.val < left.val or root.val > right.val:
return False
return self.valid_bst(root.left, left, root) and self.valid_bst(root.right, root, right)