98. Validate Binary Search Tree
这是leetcode邮件推送的题目,bug-free的代码还是需要debug一段时间的
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:
Input: 2 / \ 1 3 Output: true
Example 2:
5 / \ 1 4 / \ 3 6 Output: false Explanation: The input is: [5,1,4,null,null,3,6]. The root node's value is 5 but its right child's value is 4.
注意指针的引用 TreeNode* &pre
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { private: bool validate(TreeNode* root,TreeNode* &pre){ if(root==nullptr) return true; //cout<<"root->val: "<<root->val<<endl; if(!validate(root->left,pre)) return false; if(pre!=nullptr && (pre->val>=root->val)) return false; pre=root; return validate(root->right,pre); } public: bool isValidBST(TreeNode* root) { TreeNode* pre=nullptr; return validate(root,pre); } };
python代码
# 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, largerThan=float('-inf'), lessThan=float('inf')): """ :type root: TreeNode :rtype: bool """ if not root: return True if root.val <= largerThan or root.val >= lessThan: return False return self.isValidBST( root.left, largerThan, min(lessThan, root.val)) and \ self.isValidBST(root.right, max(largerThan, root.val), lessThan)