剑指 Offer第 7 天 搜索与回溯算法(简单)

剑指 Offer 26. 树的子结构

题目思路

不断进行遍历A树,当A树中的点和B树的根节点一致时就进行判断是不是子结构。注意在判断函数中如果B树先遍历完则为真,反之A先遍历完为假

代码

class Solution {
    
    
public:
    bool pan(TreeNode* A, TreeNode* B){
    
    
        if(!B)return true;
        if(!A)return false;
        //cout<<A->val<<" "<<B->val<<endl;
        if(A->val==B->val){
    
    
            return pan(A->left,B->left)&&pan(A->right,B->right);
        }else{
    
    
            return false;
        }
    }
    bool isSubStructure(TreeNode* A, TreeNode* B) {
    
    
        if(!B||!A)return false;
        if((A->val==B->val)&&pan(A->left,B->left)&&pan(A->right,B->right)){
    
    
            //cout<<A->val<<endl;
            return true;
        }else{
    
    
            //cout<<A->left->val<<endl;
            return isSubStructure(A->left,B)||isSubStructure(A->right,B);
        }
    }
};

剑指 Offer 27. 二叉树的镜像

题目思路

把左子树和右子树交换即可,通过递归来做

代码

class Solution {
    
    
public:
    TreeNode* mirrorTree(TreeNode* root) {
    
    
        if(!root)return NULL;
        TreeNode* l = mirrorTree(root->left);
        TreeNode* r = mirrorTree(root->right);
        root->left = r;
        root->right = l;
        return root;
    }
};

剑指 Offer 28. 对称的二叉树

题目思路

和上一题差不多,不过多一个判断函数,判断两个树结构是否是对称的。注意两颗树结构一致,应把A->left和B->right对比、把A->right和B->left对比

代码

class Solution {
    
    
public:
    bool isSymmetric(TreeNode* root) {
    
    
        if(!root)return true;
        return pan(root->left,root->right);
    }
private:
    bool pan(TreeNode* A,TreeNode* B){
    
    
        if(!A&&!B){
    
    
            return true;
        }
        if(!A||!B||A->val!=B->val){
    
    
            return false;
        }
        return pan(A->left,B->right)&&pan(A->right,B->left);
    }

};

这篇文章如果对小伙伴们有帮助的话,希望点个赞支持一下~ 十分感谢~

在这里插入图片描述


猜你喜欢

转载自blog.csdn.net/weixin_46627433/article/details/122978674