写在前面:
判断二叉树是否为对称的标准是:源二叉树是否等于二叉树的镜像
对称二叉树的特点是:(好绕嘴啊)
(1)根节点的左子树等于右子树,或左子树右子树都为空
(2)左子树的左子树等于右子树的左子树
(3)左子树的右子树等于右子树的左子树
如图所示:
左边的是对称二叉树,而右边的不是。
代码实现:
boolean isSymmetrical(TreeNode root) {
// 根节点的左子树,右子树相同
// 并且左子树的右子树和右子树的左子树相同
if (root == null) {
return true;
}
return isSame(root.left, root.right);
}
public boolean isSame(TreeNode node1, TreeNode node2) {
if (node1 == null && node2 == null) {
return true;
}
if (node1 == null || node2 == null) {
return false;
}
if (node1.val == node2.val) {
return isSame(node1.left, node2.right) && isSame(node1.right, node2.left);
}
return false;
}