原題地址:https://oj.leetcode.com/problems/validate-binary-search-tree/
題意:檢測一顆二叉樹是否是二叉查找樹。
解題思路:看到二叉樹我們首先想到需要進行遞歸來解決問題。這道題遞歸的比較巧妙。讓我們來看下面一棵樹:
4
/ \
2 6
/ \ / \
1 3 5 7
對於這棵樹而言,怎樣進行遞歸呢?root.left這棵樹的所有節點值都小於root,root.right這棵樹的所有節點值都大於root。然后依次遞歸下去就可以了。例如:如果這棵樹是二叉查找樹,那么左子樹的節點值一定處於(負無窮,4)這個范圍內,右子樹的節點值一定處於(4,正無窮)這個范圍內。思路到這一步,程序就不難寫了。
代碼:
# Definition for a binary tree node # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: # @param root, a tree node # @return a boolean def ValidBST(self, root, min, max): if root == None: return True if root.val <= min or root.val >= max: return False return self.ValidBST(root.left, min, root.val) and self.ValidBST(root.right, root.val, max) def isValidBST(self, root): return self.ValidBST(root, -2147483648, 2147483647)
