LeetCode——101.對稱二叉樹
題目
101.對稱二叉樹
給定一個二叉樹,檢查它是否是鏡像對稱的。
例如,二叉樹 [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
代碼
遞歸
//遞歸解法
class Solution0101_01 {
public boolean isSymmetric(TreeNode root) {
return isMirror(root, root);
}
public boolean isMirror(TreeNode p, TreeNode q) {
if (p == null && q == null) {
return true; //如果兩個節點都爲空,顯然成立
}
if (p == null || q == null) {
return false; //如果只是其中一個爲空,那麼不對稱
}
//如果當前節點的值相等,且左子樹和右子樹對稱,右子樹和左子樹對稱,就成立
return p.val == q.val && isMirror(p.left, q.right) && isMirror(p.right, q.left);
}
}
迭代
//隊列迭代解法
class Solution0101_02 {
public boolean isSymmetric(TreeNode root) {
return isMirror(root, root);
}
public boolean isMirror(TreeNode u, TreeNode v) {
Queue<TreeNode> q = new LinkedList<TreeNode>();
//入隊
q.offer(u);
q.offer(v);
while (!q.isEmpty()) {
//出隊
u = q.poll();
v = q.poll();
if (u == null && v == null) { //都爲空
continue;
}
if ((u == null || v == null) || (u.val != v.val)) { //有一個爲空,或者值相等
return false;
}
//將子樹入隊進行判斷
q.offer(u.left);
q.offer(v.right);
q.offer(u.right);
q.offer(v.left);
}
return true;
}
}