LINTCODE —— 验证二叉查找树
问题说明:给定一个二叉树,判断它是否是合法的二叉查找树(BST)
一棵BST定义为:
节点的左子树中的值要严格小于该节点的值。
节点的右子树中的值要严格大于该节点的值。
左右子树也必须是二叉查找树。
一个节点的树也是二叉查找树。
思路:注意严格二字的理解,这里是说对root的左子树中的所有数值不存在一个比root->val大的值,同理可以知道对root的右子树中的所有数值不存在一个比root->val小的值;分析可以把树中序遍历,如果得到的数组是严格升序排列的则为TRUE。
class Solution {
public:
/*
* @param root: The root of binary tree.
* @return: True if the binary tree is BST, or false
*/
bool isValidBST(TreeNode * root) {
// write your code here
if(root == NULL)
return true;
//中序遍历节点,有序则是严格二叉查找树;
vector<int> num;
inorderTraversal(root , num);
for(int i = 1 ; i < num.size() ; i++)
if(num[i] <= num[i-1])
return false;
return true;
}
void inorderTraversal(TreeNode *root , vector<int> &num)
{
if(root == NULL)
return ;
inorderTraversal(root -> left , num);
num.push_back(root -> val);
inorderTraversal(root -> right , num);
return;
}
};