leetcode98验证二叉树

leetcode98验证二叉树,第1张

验证二叉树


双层递归(时间复杂度高)

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    bool result = true;
    //第一层递归判断是否是二叉搜索树
    void judge_tree(TreeNode* cur )
    {   
        if(cur==nullptr) return;

        if (cur->left!=nullptr ) Traversal(cur->left , cur->val ,1);
     
        if (cur->right!=nullptr ) Traversal(cur->right , cur->val ,2);
        
        judge_tree(cur->left );
        judge_tree(cur->right );

    }
    //第二层递归判断左右子树是不是都小于自己或都大于自己
    void Traversal(TreeNode* cur , int root_val , int flag) 
    {
        if(cur==nullptr) return;
        if(flag == 1)
        {
            if(cur->val >= root_val) result=false;
        }
         if(flag == 2)
        {
            if(cur->val <= root_val) result=false;
        }
        Traversal(cur->left , root_val , flag);
        Traversal(cur->right , root_val ,flag);
    }
    
    bool isValidBST(TreeNode* root) {
        if(root == nullptr) return false;
        judge_tree(root );
        return  result; 
    }
};

单层递归
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
	//记录上一个点
    TreeNode* pre = nullptr;
    bool judge_tree(TreeNode* cur)
    {
        if(cur==nullptr) return true;
        bool left_val =  judge_tree(cur->left);
        //当前点应该比上一个大,如果小发生错误
        if(pre != nullptr && cur->val <= pre->val) return false;
        //更新当前点
        pre = cur;
        bool right_val = judge_tree(cur->right);
        return left_val&right_val;
    }
    bool isValidBST(TreeNode* root) {
        if(root==nullptr) return true;
        return judge_tree(root);
    }
};

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/3002757.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)

保存