算法——dfs 判断是否为BST
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) |