LeetCode-101. 对称二叉树

给定一个二叉树,检查它是否是镜像对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

    1
   / \
  2   2
 / \ / \
3  4 4  3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

    1
   / \
  2   2
   \   \
   3    3
说明:

如果你可以运用递归和迭代两种方法解决这个问题,会很加分。

官方题解,递归这类题目,看懂容易,设计不容易

#include <iostream>
#include <stdio.h>
using namespace std;


//     1
//    / \
//   2   2
//  / \ / \
//  3 4 4 3

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        return isMirror(root,root);
    }
    bool isMirror(TreeNode* t1, TreeNode* t2){
        if(t1==NULL && t2==NULL)
            return true;
        if(t1==NULL || t2==NULL)
            return false;

        printf("t1:%d----t2:%d\n",t1->val,t2->val);

        if(t1->val == t2->val &&
           isMirror(t1->left,t2->right) &&
           isMirror(t1->right,t2->left)){
            return true;
        }else{
            return false;
        }
    }
};

int main(){
    TreeNode *root = new TreeNode(1);
    TreeNode *l1 = new TreeNode(2);
    TreeNode *r1 = new TreeNode(2);
    TreeNode *ll2 = new TreeNode(3);
    TreeNode *lr2 = new TreeNode(4);
    TreeNode *rl2 = new TreeNode(4);
    TreeNode *rr2 = new TreeNode(3);

    root->left = l1;
    root->right = r1;
    l1->left = ll2;
    l1->right = lr2;
    r1->left = rl2;
    r1->right = rr2;

    Solution *ps = new Solution();
    bool res = ps->isSymmetric(root);

    printf("res = %d\n",res);

    return 0;
}
发布了245 篇原创文章 · 获赞 57 · 访问量 36万+

猜你喜欢

转载自blog.csdn.net/qq_16542775/article/details/103139058