一、题目
- 101. 对称二叉树 - 力扣(LeetCode)
- 给你一个二叉树的根节点
root
, 检查它是否轴对称。
二、思路
- 解法一:只能说似曾相识,是前两道题的融合,一棵树如果对称,那我将他的左子树或者右子树翻转,再判断左右子树是否相等就结了;
- 解法二:其实没必要将树翻转,之前的代码是用A树的左子树和B树的左子树进行判断,这样判出来的是完全相等的两颗树,这里稍微转换下思想,用A树的左子树和B树的右子树进行判断(这里想一想,镜像不就是这个意思吗)即可;
三、解法
解法一
class Solution {public boolean isSymmetric(TreeNode root) {if (root == null) {return true;}return equals(root.left, reverseTree(root.right));}private TreeNode reverseTree(TreeNode root) {if (root == null) {return root;}TreeNode tmp = root.left;root.left = reverseTree(root.right);root.right = reverseTree(tmp);return root;}private boolean equals(TreeNode p, TreeNode q) {if (p == null && q == null) {return true;} else if (p == null || q == null) {return false;} else if (p.val != q.val) {return false;}return equals(p.left, q.left) && equals(p.right, q.right);}
}
解法二
class Solution {public boolean isSymmetric(TreeNode root) {if (root == null) {return true;}return isMirror(root.left, root.right);}private boolean isMirror(TreeNode p, TreeNode q) {if (p == null && q == null) {return true;} else if (p == null || q == null) {return false;} else if (p.val != q.val) {return false;}return isMirror(p.left, q.right) && isMirror(p.right, q.left);}
}