leet98. 验证二叉搜索树

题目:


给定一个二叉树,判断其是否是一个有效的二叉搜索树。

一个二叉搜索树有如下定义:

  • 左子树只包含小于当前节点的数。
  • 右子树只包含大于当前节点的数。
  • 所有子树自身必须也是二叉搜索树。

示例 1:

    2
   / \
  1   3

二叉树[2,1,3], 返回 true.

示例 2:

    1
   / \
  2   3

二叉树 [1,2,3], 返回 false.


分析:

  1. 使用DFS方式遍历
  2. 每次递归时,确定新的边界,并传递边界

代码:

class Solution(object):
    def isValidBST(self, root):
        """
        :type root: TreeNode
        :rtype: bool
        """
        self.ret = True
        def dfs(node,left,right):
            if self.ret and node:
                if node.left:
                    # print "left:%d,node:%d"%(node.left.val,node.val)
                    # print "node.left:%d,left:%f"%(node.left.val,left)
                    if left < node.left.val < node.val:
                        dfs(node.left,left,node.val)
                    else:
                        # print node.val
                        self.ret = False
                        return self.ret
                if node.right:
                    # print "node.val:%d,node.right:%d,right:%f" % (node.val,node.right.val, right)
                    if node.val < node.right.val < right:
                        dfs(node.right,node.val,right)
                    else:
                        # print node.val
                        self.ret = False
                        return self.ret
        dfs(root,float("-inf"),float("inf"))
        return self.ret

思考:

  1. leetcode中国提交通过数据还比较少,该代码优于100%的case

你可能感兴趣的:(Python)