领扣LintCode算法问题答案-1360. 对称树
目录
1360. 对称树描述样例 1:样例 2:
题解鸣谢
1360. 对称树
描述
给定二叉树,返回它是否是自身的镜像(即这棵二叉树是否对称)。
样例 1:
输入: {1,2,2,3,4,4,3}
输出: true
解释:
1
/ \
2 2
/ \ / \
3 4 4 3
{1,2,2,3,4,4,3}这棵二叉树是对称的
样例 2:
输入: {1,2,2,#,3,#,3}
输出: false
解释:
1
/ \
2 2
\ \
3 3
很显然这棵二叉树并不对称
题解
public class Solution {
public boolean isSymmetric(TreeNode root
) {
if (root
== null
|| (root
.left
== null
&& root
.right
== null
)) {
return true;
}
if (root
.left
== null
|| root
.right
== null
) {
return false;
}
Queue
<TreeNode> lq
= new LinkedList<>();
lq
.offer(root
.left
);
Queue
<TreeNode> rq
= new LinkedList<>();
rq
.offer(root
.right
);
while (!lq
.isEmpty()
&& !rq
.isEmpty()) {
int size
= lq
.size();
if (rq
.size() != size
) {
return false;
}
while (--size
>= 0) {
TreeNode ln
= lq
.poll();
TreeNode rn
= rq
.poll();
if (ln
.val
!= rn
.val
) {
return false;
}
if (ln
.left
== null
&& rn
.right
!= null
) {
return false;
}
if (ln
.left
!= null
&& rn
.right
== null
) {
return false;
}
if (ln
.right
== null
&& rn
.left
!= null
) {
return false;
}
if (ln
.right
!= null
&& rn
.left
== null
) {
return false;
}
if (ln
.left
!= null
) {
lq
.offer(ln
.left
);
}
if (ln
.right
!= null
) {
lq
.offer(ln
.right
);
}
if (rn
.right
!= null
) {
rq
.offer(rn
.right
);
}
if (rn
.left
!= null
) {
rq
.offer(rn
.left
);
}
}
}
return lq
.isEmpty() && rq
.isEmpty();
}
}
原题链接点这里
鸣谢
非常感谢你愿意花时间阅读本文章,本人水平有限,如果有什么说的不对的地方,请指正。 欢迎各位留言讨论,希望小伙伴们都能每天进步一点点。