判断BST:
1.假如二叉树的左子树不为空,则左子树上所有节点的值均小于它的根节点的值; 假如右子树不空,则右子树上所有节点的值均大于它的根节点的值;它的左右子树也为二叉搜索树。
2.引入 无穷小float('-inf'), 无穷大float('inf')作为root值判断媒介
def isValidBST(self, root):
def helper(node, lower = float('-inf'), upper = float('inf')):
if not node:
return True
val = node.val
if val <= lower or val >= upper:
return False
if not helper(node.left, lower, val):
return False
if not helper(node.right, val, upper):
return False
return True
return helper(root)
也可以用中序遍历思路判断是否为BST
从根节点开始append to list
从左子树末尾开始和比较 pop of list
然后再从右子树顶部append pop 逐次向下递归判断
def isValidBST(self, root):
stack,inorder=[],float('-inf')
while stack or root:
while root:
stack.append(root)
root = root.left
root = stack.pop()
if root.val <= inorder:
return False
inorder = root.val
root = root.right
return True
网友评论