问题描述:
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/ \
2 2
\ \
3 3
解题思路:
我们可以将这一颗树复制成两棵,在任意一个节点上,用第一棵树的左节点去比较第二棵树的右节点,右节点比较左节点,如果比较结果都相等,则时镜像二叉树。
需要注意的是,如果两个节点同时为null时也是相等的。
代码实现:
public static boolean isSymmetric(TreeNode root) {
return isSame(root, root);
}
private static boolean isSame(TreeNode v1, TreeNode v2) {
if(v1==null && v2==null) return true;
//当其中一个为空另一个不为空时,表示不对称
if(v1==null || v2==null) return false;
//如果当前节点相等,则交叉比较两个左右节点
return v1.val==v2.val && isSame(v1.left, v2.right) && isSame(v1.right, v2.left);
}
提交结果: