leetcode-剑指28-OK

language: C

address

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */

//
bool isSymmetric(struct TreeNode* root){
    if(root ==NULL)
        return true;

// 判断两个节点是否一样
    bool same(struct TreeNode* a, struct TreeNode* b){
        if((a==NULL)&&(b==NULL))
            return true;
        if((a== NULL)||(b==NULL))
            return false;
        if(a->val == b->val)
            return true;
        return false;
    }

    bool ans=true;  // 答案

// 同步遍历左右子树,并且镜像的判断是否一样,一旦不一样,就把ans 改成false然后返回,在每个返回的地方都判断一下ans
// 左子树根填a的位置,右子树根填b的位置
    void check(struct TreeNode* a, struct TreeNode* b){
        if(!ans)
            return;
        if(!same(a,b)){
            ans = false;
            return;
        }
        if(a !=NULL){
            check(a->left,b->right);
            if(!ans)
                return;
            check(a->right,b->left);
        }
    }
    check(root->left,root->right);
    return ans;
}
原文地址:https://www.cnblogs.com/gallien/p/14323965.html