利用二叉搜索树中序遍历结果为递增序列的特点判断该二叉树是否是二叉搜索树。
题目
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
- 节点的左子树只包含小于当前节点的数。
- 节点的右子树只包含大于当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树
示例
示例 1:
示例 2:
| 输入: 5 / \ 1 4 / \ 3 6 输出: false
|
解释: 输入为: [5,1,4,null,null,3,6]。
根节点的值为 5 ,但是其右子节点值为 4 。
考察知识点
二叉树
核心思想
直觉
对二叉树进行一个中序遍历,中序遍历为有序递增的,就是有效二叉树。
注意判断,如果结果中有重复的,直接就不认为是二叉树了
Python版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
class Solution: def isValidBST(self, root: TreeNode) -> bool: res = self.inorderTraversal(root) if len(res)!=len(set(res)): return False tmp = res[:] tmp.sort() return res == tmp
def inorderTraversal(self, root): """ In-Order Traversal of binary tree based on circulation :param root: root node of target binary tree :return: TreeNode """ res = [] stack = [] node = root while node or len(stack) > 0: while node: stack.append(node) node = node.left if len(stack): node = stack.pop() res.append(node.val) node = node.right return res
|