LeetCode-Validate Binary Search Tree-合法二叉搜索树-二叉树递归

https://oj.leetcode.com/problems/validate-binary-search-tree/

递归判断二叉树是否为合法二查搜索树的题目。也可以中序打印出来然后扫描。

注意判断BST是否合法条件是当前节点的值大于一切左边的+小于一切右边的。也就是说仅仅判断他和两个儿子的关系是不行的。需要把儿子子树上的最大最小值传递回来比较满足条件才可以。

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
 const int INF=9999;
class Solution {
public:
    bool Solve(TreeNode *r,int &mi,int &ma){
        if (r==NULL) return true;
        mi=r->val;
        ma=r->val;
        if (r->left!=NULL) {
            int lmi,lma;
            if (!Solve(r->left,lmi,lma)) return false;
            if (r->val<=lma) return false;
            mi=min(mi,lmi);
            ma=max(ma,lma);
        }
        if (r->right!=NULL) {
            int rmi,rma;
            if (!Solve(r->right,rmi,rma)) return false;
            if (r->val>=rmi) return false;            
            mi=min(mi,rmi);
            ma=max(ma,rma);
        }
        return true;
    }
    bool isValidBST(TreeNode *root) {
        int l,r;
        return Solve(root,l,r);
    }
};

  

posted @ 2014-10-11 02:19  zombies  阅读(291)  评论(0编辑  收藏  举报