Fork me on GitHub

leetcode之101. 对称二叉树

题目描述:

题目描述:
给定一个二叉树,检查它是否是镜像对称的。

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

1
2
3
4
5
6
>     1
> / \
> 2 2
> / \ / \
> 3 4 4 3
>

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

1
2
3
4
5
6
>   1
> / \
> 2 2
> \ \
> 3 3
>

解题思路:

递归,时间复杂度:$O(nlogn)$,空间复杂度:$O(1)$.

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
26
27
28
/**
* 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 isSymmetric_(root -> left, root -> right);
}
bool isSymmetric_(TreeNode* left, TreeNode* right)
{
if(!left && !right) return true;
if(!left || !right) return false;

if(left -> val == right -> val)
return isSymmetric_(left -> left, right -> right) &&
isSymmetric_(left -> right, right -> left);
return false;
}

};