Fork me on GitHub

leetcode——[101]Symmetric Tree对称二叉树

题目

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

例如,二叉树 [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

说明:

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

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

For example, this binary tree [1,2,2,3,4,4,3] is symmetric:

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

But the following [1,2,2,null,3,null,3] is not:

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

Note:
Bonus points if you could solve it both recursively and iteratively.

解题方法

分割为两个子树

首先判断根是否为空,不为空则判断左右子节点是否同为空,同为空则为对称二叉树;然后判断左右子节点是否存在空指针,存在则不为对称二叉树;左右子节点均不为空,则判断它们的值val是否相等,然后递归判断左右子节点的子树是否为对称二叉树。这段代码跑了10ms,超过了92.26%的java提交。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
// Method_01 10ms 92.26%
public boolean isSymmetric(TreeNode root) {
if (root == null) {
return true;
}
return isSymmetricSubTree(root.left, root.right);
}

private boolean isSymmetricSubTree(TreeNode left, TreeNode right) {
if (left == null && right == null) {
return true;
}
if (left == null || right == null) {
return false;
}
if (left.val != right.val){
return false;
}
return isSymmetricSubTree(left.left, right.right)
&& isSymmetricSubTree(left.right, right.left);
}
}
BJTU-HXS wechat
海内存知己,天涯若比邻。