Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree [1,2,2,3,4,4,3] is symmetric:
1
/ \
2 2
/ \ / \
3 4 4 3
But the following [1,2,2,null,3,null,3] is not:
1
/ \
2 2
\ \
3 3
Note:
Bonus points if you could solve it both recursively and iteratively.
複製代碼
給定一個二叉樹,檢查它是不是自身的鏡像(即圍繞其中心對稱)。 例如,這個二叉樹[1,2,2,3,4,4,3]是對稱的:git
1 / \ 2 2 / \ / \ 3 4 4 3 複製代碼
可是下面的[1,2,2,null,3,null,3]不是:github
1 / \ 2 2 \ \ 3 3 複製代碼
注意: 若是你能遞歸地和迭代地解出它,那就更好了。bash
本題判斷兩個樹是否鏡像樹,鏡像樹的特色,在於它的左節點和右節點是同樣的,根據這個特色咱們能夠解決這個問題。ui
按照思路代碼以下this
public boolean isSymmetric(TreeNode root) {
if (root == null) {
return true;
}
return isSymmetric(root.left, root.right);
}
public boolean isSymmetric(TreeNode left, TreeNode right) {
if (left == null && right == null) {
return true;
}
boolean isSame = left == null;
isSame = isSame ? false : right != null && left.val == right.val;
return isSame && isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
複製代碼
時間複雜度: 該方案用了遞歸遍歷樹,不要判斷時間複雜度,並且樹的遍歷複雜度都說很差,且記爲 O(n)spa
空間複雜度: 該方案使用了沒有使用額外空間,因此空間複雜度是 O(n)=O(1);翻譯
本題的大體解法如上所訴,按照特色咱們能夠很簡單的解決這個問題,其實也能夠按層進行對比,判斷每一層是否鏡像,能夠用隊列來解決。code