95. 验证二叉查找树
中文English
给定一个二叉树,判断它是否是合法的二叉查找树(BST)
一棵BST定义为:
- 节点的左子树中的值要严格小于该节点的值。
- 节点的右子树中的值要严格大于该节点的值。
- 左右子树也必须是二叉查找树。
- 一个节点的树也是二叉查找树。
Example
样例 1:
输入:{-1}
输出:true
解释:
二叉树如下(仅有一个节点):
-1
这是二叉查找树。
样例 2:
输入:{2,1,4,#,#,3,5}
输出:true
解释:
二叉树如下:
2
/ \
1 4
/ \
3 5
这是二叉查找树。
"""
Definition of TreeNode:
class TreeNode:
def __init__(self, val):
self.val = val
self.left, self.right = None, None
""" class Solution:
"""
@param root: The root of binary tree.
@return: True if the binary tree is BST, or false
"""
_is_bst = True
_last_val = -float('inf') def isValidBST(self, root):
# write your code here
self.helper(root)
return self._is_bst def helper(self, root):
if not root:
return
self.helper(root.left)
if root.val <= self._last_val:
self._is_bst = False # return
self._last_val = root.val
self.helper(root.right)
需要在遍历中记住上次遍历节点,根据上次的节点和当前节点进行比较而得到result的算法模板:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
class Solution():
last_node = None
result = None
def run( self , root):
self .dfs(root)
return self .result
def dfs( self ):
if last_node is None :
last_node = root
else :
do_sth(last_node, root)
dfs(root.left)
dfs(root.right)
|