101. 对称二叉树-C语言

题目来源:力扣

题目描述:

给你一个二叉树的根节点 root , 检查它是否轴对称。

示例 1:

101. 对称二叉树-C语言_第1张图片

输入:root = [1,2,2,3,4,4,3]
输出:true

示例 2:

101. 对称二叉树-C语言_第2张图片

输入:root = [1,2,2,null,3,null,3]
输出:false

 代码:

struct TreeNode* invertTree(struct TreeNode* root){
    if(root==NULL){
        return NULL;
    }
    struct TreeNode* left=invertTree(root->left);
    struct TreeNode* right=invertTree(root->right);
    root->left=right;
    root->right=left;
    return root;
}

bool isSameTree(struct TreeNode* p, struct TreeNode* q){
    if(p==NULL && q==NULL){
        return true;
    }
    if(p==NULL || q==NULL){
        return false;
    }
    if(p->val != q->val){
        return false;
    }

    return isSameTree(p->left,q->left) && isSameTree(p->right,q->right);
}

bool isSymmetric(struct TreeNode* root){
    invertTree(root->right);
    return isSameTree(root->left,root->right);
}   

思路:
我们将二叉树的右子树反转,然后判断左右子树是否相等即可,反转和判断是否相等是我们之前写过的题,大家可以去看一看

(4条消息) 226. 翻转二叉树-C语言_KLZUQ的博客-CSDN博客

(4条消息) 100. 相同的树-C语言_KLZUQ的博客-CSDN博客

这里我没有处理一些细节,比如将原二叉树恢复原状等等,大家有需求加上即可 

你可能感兴趣的:(c语言,c++,数据结构,二叉树,算法)