題目:
給定一個(gè)二叉樹,檢查它是否是鏡像對(duì)稱的。
示例:
例如,二叉樹 [1,2,2,3,4,4,3] 是對(duì)稱的。

image.png
但是下面這個(gè) [1,2,2,null,3,null,3] 則不是鏡像對(duì)稱的:

image.png
說(shuō)明:
如果你可以運(yùn)用遞歸和迭代兩種方法解決這個(gè)問題,會(huì)很加分。
思路:
遞歸結(jié)束條件:
都為空指針則返回 true
只有一個(gè)為空則返回 false
遞歸過(guò)程:
判斷兩個(gè)指針當(dāng)前節(jié)點(diǎn)值是否相等
判斷 A 的右子樹與 B 的左子樹是否對(duì)稱
判斷 A 的左子樹與 B 的右子樹是否對(duì)稱
短路:
在遞歸判斷過(guò)程中存在短路現(xiàn)象,也就是做 與 操作時(shí),如果前面的值返回 false 則后面的不再進(jìn)行計(jì)算
代碼:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null) return true;
return isMirror(root.left, root.right);
}
private boolean isMirror(TreeNode t1, TreeNode t2) {
if (t1 == null && t2 == null) return true;
if (t1 == null || t2 == null) return false;
if (t1.val != t2.val) {
return false;
} else {
return (isMirror(t1.left, t2.right) && isMirror(t1.right, t2.left));
}
}
}
時(shí)間復(fù)雜度 : O(n)