101.对称二叉树

一、题目描述

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

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

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

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

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

说明:

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

二、题解

1.递归

1.1 思路

什么是对称二叉树:

  1. 根节点的左右孩子相等
  2. 左孩子的左子树 == 右孩子的右子树 && 左孩子的右子树 == 右孩子的左子树
  3. 递归第二个条件

1.2 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool visit(struct TreeNode *nodel, struct TreeNode *noder)
{
if (nodel == NULL && noder == NULL)
return true;
if (nodel == NULL || noder == NULL)
return false;
if (nodel->val == noder->val)
return visit(nodel->left, noder->right) && visit(nodel->right, noder->left);
return false;
}

bool isSymmetric(struct TreeNode *root)
{
if (root == NULL)
return true;
return visit(root->left, root->right);
}