Given a binary tree, determine if it is a valid binary search tree (BST).
Input:
2
/ \
1 3
Output: true
5
/ \
1 4
/ \
3 6
Output: false
Explanation: The input is: [5,1,4,null,null,3,6]. The root node's value
is 5 but its right child's value is 4.
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def isValidBST(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
traverse = []
self.inorder(root, traverse)
for i in range(1, len(traverse)): # 为保证 i - 1 不会出界,从 index = 1 开始
if traverse[i] <= traverse[i - 1]:
return False
return True
def inorder(self, root, traverse): # recursive 一般写到最后一个 None 节点再判断比较简洁
if not root:
return None
self.inorder(root.left, traverse)
traverse.append(root.val)
self.inorder(root.right, traverse)
class Solution(object):
def isValidBST(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
pre = None
stack = []
while(root or stack):
while(root):
stack.append(root)
root = root.left
root = stack.pop() # 当 root 遇到 None 时,从 stack 的 candidates 中取出上一个
if pre and root.val <= pre.val:
return False
pre = root
root = root.right
return True