給定乙個二叉樹,檢查它是否是映象對稱的。
例如,二叉樹 [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
說實話這道題我想了挺久的,可能太久沒接觸過二叉樹了。
比較容易得到的思路是是遞迴。根節點下的左右兩棵樹在乙個方法內分別 進行先序遞迴遍歷,但是不同的是,乙個是從左邊開始的先序遍歷,乙個是從右邊開始的先序遍歷。然後依次判斷元素是否相同即可。
另外也可以使用迭代的方式,因為是先序遍歷,先遍歷到先判斷,所以這裡可以使用乙個特點相同的佇列資料結構來輔助迭代。每次取出來兩個元素,然後按照一左一右把元素放進去即可。(參考**即可理解)
**實現
方法一
class
treenode
}public
boolean
issymmetric
(treenode root)
private
boolean
getboolean
(treenode nodel, treenode noder)
方法二public
boolean
issymmetric
(treenode root)
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
;}
假設二叉樹的元素個數為n
方法一時間複雜度:每個元素都需要遍歷一次
時間複雜度:o(n)空間複雜度:棧的個數不會超過元素個數
空間複雜度:o(n)方法二
時間複雜度:每個元素都需要遍歷一次
時間複雜度:o(n)空間複雜度:佇列的長度不會超過n
空間複雜度:o(n)
判斷對稱二叉樹
typedef struct node bn 不用關心輸入,二叉樹構造和刪除過程已經在main函式中實現,需要你們實現函式 int issymmetric bn root 來判斷一棵二叉樹是否對稱,對稱返回1,非對稱返回0.node結構要按照上面的 在symmetric.h中進行定義。注意被測試二叉...
判斷對稱二叉樹
相等條件 1.走到最底層還一樣,說明相等 root.left null root.right null,return true 2.一端有葉子一端沒有葉子,肯定不想等 if left null right null return false 3.值相等 左的右等於右的左 左的左等於右的右 class...
演算法 對稱二叉樹的判斷
請實現乙個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。題目分析 遞迴思想,如果一棵樹根結點為空則返回true,否則遞迴判斷左子樹和右子數是否對稱,對稱即各從某一相同結點出發,判斷一棵樹的左結點和另一棵樹的右節點是否相同 一棵樹的右節點和另一棵樹...