最近面試做了個算法題,判斷二叉樹是不是鏡像對稱的。
理解一下鏡像對稱:就是從中間對摺能完全重合且節點值相同;
這裏是用遞歸調用來實現的,話不多說,直接上代碼,如下:
/*
* 定義一個樹節點類
*/
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
// 核心算法如下
public boolean isMirrorSymmetry(TreeNode root) {
if (root == null) {
return true;
}
return isMirrorSymmetry(root.left, root.right);
}
public boolean isMirrorSymmetry(TreeNode node1, TreeNode node2) {
if (node1 == null && node2 == null) return true;
if (node1 == null || node2 == null) return false;
// 左子樹和右子樹不僅要比較當前節點值是否相等,還需要比較二者的子樹之間是否一致
// 由於是鏡像對稱,故 node1 的左子節點要和 node2 的右子節點比較,同理...
return node1.val == node2.val
&& isMirrorSymmetry(node1.left, node2.right)
&& isMirrorSymmetry(node1.right, node2.left);
}