給定乙個二叉樹,檢查它是否是映象對稱的。
例如,二叉樹 [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說明:
如果你可以運用遞迴和迭代兩種方法解決這個問題,會很加分。
文中都說了,運用遞迴和迭代兩種方法解決,會很加分,安排!
遞迴
其實這個過程就是根節點的左節點和右節點進行比較,然後再根節點的左節點的左節點和根節點的右節點的右節點比較,根節點的左節點的右節點和根節點的右節點的左節點比較…這就很容易實現乙個遞迴的過程。
迴圈
迴圈需要借助佇列這種fifo的資料結構,每次我們都從佇列中拿出兩個元素來進行對比,然後再把這兩個元素的左右節點按照第乙個元素的左和第二元素的右,第乙個元素的右和第二個元素的左的順序放入到佇列中,隊列為空即比較完成。
這兩種的時間複雜度都為o(n),空間複雜度上遞迴是樹的層高,迴圈是樹的節點個數。
實測下來遞迴效率要比迴圈高。
遞迴
迴圈class solution
private boolean ismirror(treenode left, treenode right)
if (left == null || right == null)
return left.val == right.val && ismirror(left.left, right.right) && ismirror(left.right, right.left);
}}
class solution
if (t1 == null || t2 == null)
if (t1.val != t2.val)
queue.add(t1.left);
queue.add(t2.right);
queue.add(t1.right);
queue.add(t2.left);
}return true;
}}
對稱二叉樹c 對稱的二叉樹
很簡單,關鍵還是知道怎麼樣才能判斷乙個 二叉樹是否對稱,只要採用前序 中序 後序 層次遍歷等任何一種遍歷方法,分為先左後右和先 右後左兩種方法,只要兩次結果相等就說明這棵樹是一顆對稱二叉樹。迭代版本 class solution public bool issymmetric treenode ro...
對稱二叉樹
請實現乙個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。這題還是蠻簡單的。對稱二叉樹 include using namespace std struct treenode bool issymmetrical treenode proot1,t...
對稱二叉樹
請實現乙個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。solution public class treenode 我們可以通過比較二叉樹的前序遍歷序列和對稱前序遍歷序列來判斷二叉樹是不是對稱的 public class solution bo...