二叉树的递归问题

37. 树的子结构

输入两棵二叉树A,B,判断B是不是A的子结构。

我们规定空树不是任何树的子结构。

class Solution {
public:
    map<TreeNode*,bool> mp
    bool issub(TreeNode* p1,TreeNode* p2){
        if(p2 == NULL) return true;
        if(p1 == NULL) return false;
        if(p1->val != p2->val) return issub(p1->left,p2) || issub(p1->right,p2);
        return issub(p1->left,p2->left) && issub(p1->right,p2->right) || issub(p1->left,p2) || issub(p1->right,p2);
    }
    bool hasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {
        if(pRoot2 == NULL) return false;
        return issub(pRoot1,pRoot2);
    }
};

38. 二叉树的镜像

输入一个二叉树,将它变换为它的镜像。

class Solution {
public:
    void mirror(TreeNode* root) {
        TreeNode* t;
        if(!root) return;
        t = root->left;
        root->left = root->right;
        root->right = t;
        mirror(root->left);
        mirror(root->right);
        }
};

39. 对称的二叉树

请实现一个函数,用来判断一棵二叉树是不是对称的。

如果一棵二叉树和它的镜像一样,那么它是对称的。

class Solution {
public:
    bool issym(TreeNode* p1,TreeNode* p2){
        if(!p1 && !p2) return true;
        if(!p1 || !p2) return false;
        if(p1->val != p2->val) return false;
        return issym(p1->left,p2->right) && issym(p1->right,p2->left);
    }
    bool isSymmetric(TreeNode* root) {
        if(!root) return true;
        return issym(root->left,root->right);
    }
};
原文地址:https://www.cnblogs.com/Aliencxl/p/12335839.html