給定乙個二叉樹,檢查它是否是映象對稱的。
例如,二叉樹 [1,
2,2,
3,4,
4,3] 是對稱的。
1/ \ 2
2/ \ / \34
43但是下面這個 [1,
2,2,
null,3
,null,3
] 則不是映象對稱的:
1/ \
22\ \
33
方法一:遞迴
二叉樹的遍歷問題最容易想到的就是遞迴,因為子樹結構和整棵樹都一樣,可以用相同的方法遞迴遍歷。
根結點為空,直接返回true
根結點不為空,比較左右子樹。分三種情況:
左右子樹都為空,返回true。
左右子樹只有乙個為空,返回false。
當左右子樹都不為空,比較左右子樹的根結點是否相同,相同則分別遞迴比較左子樹的左子樹和右子樹的右子樹,左子樹的右子樹和右子樹的左子樹。只有三者都為true 時,才返回true。
var
issymmetric
=function
(root)
;return
iscommon
(root.left,root.right);}
;
複雜度分析
假設樹上一共 n 個節點。
方法二:迭代
首先我們引入乙個佇列,這是把遞迴程式改寫成迭代程式的常用方法。初始化時我們把左右子樹的根結點入隊。每次提取兩個結點並比較它們的值(佇列中每兩個連續的結點應該是相等的,而且它們的子樹互為映象),然後將兩個結點的左右子結點按相反的順序插入佇列中。當隊列為空時,或者我們檢測到樹不對稱(即從佇列中取出兩個不相等的連續結點)時,該演算法結束。
哪些情況不對稱:
var
issymmetric
=function
(root)
queue.
push
(left.left,right.right,left.right,right.left);}
return
true;}
;
複雜度分析 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說明 如果你可以運用遞迴和迭代兩種方法解決這個問題,會很加分。思路 遞迴就用dfs,迭代是b...
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說明 如果你可以運用遞迴和迭代兩種方法解決這個問題,會很加分。解題思路 對稱二叉樹可以理解...
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 說明 如果你可以運用遞迴和迭代兩種方法解決這個問題,會很加分。使用輔助空間佇列 defi...