給定乙個二叉樹,檢查它是否是映象對稱的。
參考官方解法,使用兩種方式完成:
1.遞迴
如果乙個樹的左子樹與右子樹映象對稱,那麼這個樹是對稱的。
如果同時滿足下面的條件,兩個樹互為映象:
它們的兩個根結點具有相同的值每個樹的右子樹都與另乙個樹的左子樹映象對稱我們可以實現這樣乙個遞迴函式,通過「同步移動」兩個指標的方法來遍歷這棵樹,pp 指標和 qq 指標一開始都指向這棵樹的根,隨後 pp 右移時,qq 左移,pp 左移時,qq 右移。每次檢查當前 pp 和 qq 節點的值是否相等,如果相等再判斷左右子樹是否對稱。
2.迭代
首先我們引入乙個佇列,這是把遞迴程式改寫成迭代程式的常用方法。初始化時我們把根節點入隊兩次。每次提取兩個結點並比較它們的值(佇列中每兩個連續的結點應該是相等的,而且它們的子樹互為映象),然後將兩個結點的左右子結點按相反的順序插入佇列中。當隊列為空時,或者我們檢測到樹不對稱(即從佇列中取出兩個不相等的連續結點)時,該演算法結束。1.遞迴
class
solution
public
boolean
check
(treenode p, treenode q)
if(p == null || q == null)
return p.val == q.val &&
check
(p.left, q.right)
&&check
(p.right, q.left);}
}
2.迭代
class
solution
public
boolean
check
(treenode u, treenode v)if(
(u == null || v == null)
||(u.val != v.val)
) q.
offer
(u.left)
; q.
offer
(v.right)
; q.
offer
(u.right)
; q.
offer
(v.left);}
return
true;}
}
演算法 對稱二叉樹
給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 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程式入口 treenode root2 new treenode 9 root2.left...
對稱二叉樹c 對稱的二叉樹
很簡單,關鍵還是知道怎麼樣才能判斷乙個 二叉樹是否對稱,只要採用前序 中序 後序 層次遍歷等任何一種遍歷方法,分為先左後右和先 右後左兩種方法,只要兩次結果相等就說明這棵樹是一顆對稱二叉樹。迭代版本 class solution public bool issymmetric treenode ro...
演算法 判斷對稱二叉樹
給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 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示例 輸入 2,1,5,6,2,3 輸出 10說實話這道題我想了挺久的,可能太久沒接觸過二叉...