Leetcode 98 Validate Binary Search Tree

Given a binary tree, determine if it is a valid binary search tree (BST).

Assume a BST is defined as follows:

  • The left subtree of a node contains only nodes with keys less than the node's key.
  • The right subtree of a node contains only nodes with keys greater than the node's key.
  • Both the left and right subtrees must also be binary search trees.

 

Example 1:

    2
   / \
  1   3

Binary tree [2,1,3], return true.

 

Example 2:

    1
   / \
  2   3

Binary tree [1,2,3], return false.

存储左边与右边的最大与最小值和root比较

class Solution(object):
    def isValidBST(self,root):
        return self.isValidBST2(root, float('-inf'), float('inf'))
        
    def isValidBST2(self, root, minval, maxval):
        if not root:
            return True
        if root.val >= maxval or root.val <= minval:
            return False
        return self.isValidBST2(root.left, minval, root.val) and self.isValidBST2(root.right, root.val, maxval)

 inorder traversal过程中进行比较

def is_valid_bst(root)
  ans, stack = [], [[false,root]]
  while not stack.empty?
    visit, node = stack.pop
    if node
      stack << [false,node.right] << [true,node] << [false,node.left] if not visit
      if visit
          if ans.empty? or node.val > ans[-1]
              ans << node.val
          else
            return false
        end 
      end
    end
  end
  true
end

 

posted @ 2016-06-20 15:33  lilixu  阅读(158)  评论(0编辑  收藏  举报