【剑指 offer】对称的二叉树

1、题目描述

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

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

样例

如下图所示二叉树[1,2,2,3,4,4,3,null,null,null,null,null,null,null,null]为对称二叉树:
1
/ \
2 2
/ \ / \
3 4 4 3

如下图所示二叉树[1,2,2,null,4,4,3,null,null,null,null,null,null]不是对称二叉树:
  1
  / \
2   2
\   / \
4 4 3

2、问题描述:

  • 判断一个二叉树是否是左右镜面对称的。

3、问题关键:

  • 递归左右子树,看对称位置值是否相同。

4、C++代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        if (!root) return true;//空结点是对称的。
        return dfs(root->left, root->right);
    }
    bool dfs(TreeNode *p, TreeNode *q) {
        if (!p || !q) return !p && !q;
        if (p->val != q->val) return false;
        return dfs(p->left, q->right) && dfs(p->right, q->left);//判断左子树的左结点和右子树的有结点是否相等。左子树的右结点和右子树的左结点是否相同。
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 题目 请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,在如图4...
    Longshihua阅读 158评论 0 1
  • 本文首发于我的个人博客:尾尾部落 题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同...
    繁著阅读 283评论 0 1
  • 题目描述 [对称的二叉树] 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是...
    一只可爱的柠檬树阅读 99评论 0 0
  • 描述:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的...
    大数据Zone阅读 170评论 0 1
  • 本身就是不写东西好多年了,初写简书好像纯粹就是文字的一种简单罗列。为了练笔,告诉自己一定要坚持。每天都要很努力的记...
    静音2006阅读 185评论 0 0

友情链接更多精彩内容