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:
confused what "{1,#,2,3}"
means? >
read more on how binary tree is serialized on OJ.
解题思路:
(1)空二叉树是BST
(2)若根节点R值大于左子树的最大值,且小于右子树最小值,并且左右子树都是BST,那么以R为根的树也是BST
因此代码如下:
/** * 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 { public: bool isValidBST(TreeNode* root) { if(root == NULL){ return true; } TreeNode* leftMaxNode = getMaxNode(root->left); TreeNode* rightMinNode = getMinNode(root->right); if(leftMaxNode!=NULL && leftMaxNode->val >= root->val){ return false; } if(rightMinNode!=NULL && rightMinNode->val <= root->val){ return false; } return isValidBST(root->left) && isValidBST(root->right); } TreeNode* getMaxNode(TreeNode* root){ if(root == NULL){ return NULL; } TreeNode* maxNode = root; TreeNode* leftMaxNode = getMaxNode(root->left); TreeNode* rightMaxNode = getMaxNode(root->right); if(leftMaxNode!=NULL && leftMaxNode->val > maxNode->val){ maxNode = leftMaxNode; } if(rightMaxNode!=NULL && rightMaxNode->val > maxNode->val){ maxNode = rightMaxNode; } return maxNode; } TreeNode* getMinNode(TreeNode* root){ if(root == NULL){ return NULL; } TreeNode* minNode = root; TreeNode* leftMinNode = getMinNode(root->left); TreeNode* rightMinNode = getMinNode(root->right); if(leftMinNode!=NULL && leftMinNode->val < minNode->val){ minNode = leftMinNode; } if(rightMinNode!=NULL && rightMinNode->val < minNode->val){ minNode = rightMinNode; } return minNode; } };
版权声明:本文为博主原创文章,未经博主允许不得转载。
[LeetCode] Validate Binary Search Tree
原文地址:http://blog.csdn.net/kangrydotnet/article/details/47337253