赞
踩
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
示例 1:
- 输入:
- 2
- / \
- 1 3
- 输出: true
示例 2:
- 输入:
- 5
- / \
- 1 4
- / \
- 3 6
- 输出: false
- 解释: 输入为: [5,1,4,null,null,3,6]。
- 根节点的值为 5 ,但是其右子节点值为 4 。
思路:
二叉搜索树的条件就是root.left<root<root.right,不就是要求中序遍历严格升序吗?
- # 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
- """
- inorder = list()
- self.inorderTra(root, inorder)
- # print inorder
- for i in range(len(inorder)-1):
- if inorder[i] >= inorder[i+1]:
- return False
- return True
-
- def inorderTra(self, root, inorder):
- if not root:
- return None
-
- self.inorderTra(root.left, inorder)
- inorder.append(root.val)
- self.inorderTra(root.right, inorder)
-
- return
下面的写于2019.6.24
- class Solution(object):
- def isValidBST(self, root):
- """
- :type root: TreeNode
- :rtype: bool
- """
- def inOrder(node):
- if not node:
- return []
- return inOrder(node.left) + [node.val] + inOrder(node.right)
-
- inorder = inOrder(root)
- return len(inorder) == len(set(inorder)) and inorder == sorted(inorder)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。