知識點:樹
難度:簡單
題目:給定乙個二叉樹,檢查它是否是映象對稱的。
示例:
方法一:遞迴
如果乙個樹的左子樹與右子樹映象對稱,那麼這個樹是對稱的。
因此,該問題可以轉化為:兩個樹在什麼情況下互為映象?
如果同時滿足下面的條件,兩個樹互為映象:
1.它們的兩個根結點具有相同的值。
2.每個樹的右子樹都與另乙個樹的左子樹映象對稱。
就像人站在鏡子前審視自己那樣。鏡中的反射與現實中的人具有相同的頭部,但反射的右臂對應於人的左臂,反之亦然。
golang:
/**
* definition for a binary tree node.
* type treenode struct
*/func
issymmetricgo
(t1 *treenode, t2 *treenode)
bool
else
if t1==
nil|| t2==
nilreturn t1.val == t2.val &&
issymmetricgo
(t1.left, t2.right)
&&issymmetricgo
(t1.right, t2.left)
}func
issymmetric
(root *treenode)
bool
執行:
複雜度分析:
時間複雜度:o(n)
空間複雜度:o(n)
方法二:迭代
/**
* definition for a binary tree node.
* type treenode struct
*/func
issymmetric
(root *treenode)
bool
// 從左向右遍歷順序的佇列
rq :=
*treenode
// 從右向左遍歷順序的佇列
lq =
(lq, root)
// 加入初始節點
rq =
(rq, root)
forlen
(lq)!=0
&&len
(rq)!=0
else
if lcur!=
nil&& rcur!=
nil&& lcur.val == rcur.val
else}if
len(lq)==0
&&len
(rq)==0
else
}
執行:
複雜度分析:
時間複雜度:o(n)
空間複雜度:o(n)
力扣 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 二 解題思路 遞迴思想。1 先判斷根節點是否為空節點 2 判斷左子樹a和右...
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 3bool issymmetric2 struct treenode q,struct tr...
力扣101 對稱二叉樹
判斷二叉樹是否對稱 給定一棵二叉樹,判斷琪是否是自身的映象 即 是否對稱 例如 下面這棵二叉樹是對稱的 2 2 3 4 4 3 下面這棵二叉樹不對稱。2 2 3 3 備註 希望你可以用遞迴和迭代兩種方法解決這個問題 示例1輸入 輸出true 示例2輸入 輸出false 對稱二叉樹 模式識別 深度搜尋...