剑指offer——对称的二叉树

来源:互联网 发布:四川省网络作家协会 编辑:程序博客网 时间:2024/05/29 17:29

1. 题目描述

  请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。

2. 题目分析

  根据题目描述,首先要明确二叉树的镜像的定义。镜像二叉树,就是将原二叉树的左右子树进行交换。那么对称二叉树,就是一颗二叉树的镜像树和他本身相等。镜像后,二叉树的左子树变成右子树,右子树变成左子树树了。要对比原二叉树的左子树和镜像树的右子树,及原二叉树的右子树和镜像树的左子树。那么,代码如下。

3. 题目解答——cpp

/*struct TreeNode {    int val;    struct TreeNode *left;    struct TreeNode *right;    TreeNode(int x) :            val(x), left(NULL), right(NULL) {    }};*/class Solution {public:    bool isSymmetrical(TreeNode* pRoot)    {        if (pRoot == nullptr)            return true;        return isSymmetrical(pRoot,pRoot);    }    bool isSymmetrical(TreeNode* pRoot1, TreeNode* pRoot2)    {        if (pRoot1 == nullptr && pRoot2 == nullptr)            return true;        if (pRoot1 == nullptr && pRoot2 != nullptr)            return false;        if (pRoot1 != nullptr && pRoot2 == nullptr)            return false;        if (pRoot1->val != pRoot2->val)            return false;        return (isSymmetrical(pRoot1->left,pRoot2->right) && isSymmetrical(pRoot1->right,pRoot2->left));    }};
原创粉丝点击