题目

类型:Tree

难度:简单

对称二叉树 - 图1

解题思路

该问题可以转化为:两个树在什么情况下互为镜像?

如果同时满足下面的条件,两个树互为镜像:

  • 它们的两个根结点具有相同的值
  • 每个树的右子树都与另一个树的左子树镜像对称

实现一个递归函数,通过同步移动两个指针的方法来遍历这棵树,p 指针和 q 指针一开始都指向这棵树的根,随后 p 右移时,q 左移,p 左移时,q 右移。每次检查当前 p 和 q 节点的值是否相等,如果相等再判断左右子树是否对称。

代码

  1. class Solution {
  2. public boolean isSymmetric(TreeNode root) {
  3. return check(root, root);
  4. }
  5. public boolean check(TreeNode p, TreeNode q) {
  6. if (p == null && q == null) {
  7. return true;
  8. }
  9. if (p == null || q == null) {
  10. return false;
  11. }
  12. return p.val == q.val && check(p.left, q.right) && check(p.right, q.left);
  13. }
  14. }