leetcode 101 對稱二叉樹

2021-09-29 15:43:35 字數 2051 閱讀 6066

給定乙個二叉樹,檢查它是否是映象對稱的。

例如,二叉樹 [1,

2,2,

3,4,

4,3]

[1,2,2,3,4,4,3]

[1,2,2

,3,4

,4,3

] 是對稱的。

但是下面這個 [1,

2,2,

null

,3,n

ull,

3][1,2,2,null,3,null,3]

[1,2,2

,nul

l,3,

null

,3] 則不是映象對稱的:

說明:如果你可以運用遞迴和迭代兩種方法解決這個問題,會很加分。

————————

解法一:遞迴,如果乙個樹的左子樹與右子樹映象對稱,那麼這個樹是對稱的。

因此,該問題可以轉化為:兩個樹在什麼情況下互為映象?

如果同時滿足下面的條件,兩個樹互為映象:

它們的兩個根結點具有相同的值。

每個樹的右子樹都與另乙個樹的左子樹映象對稱。

就像人站在鏡子前審視自己那樣。鏡中的反射與現實中的人具有相同的頭部,但反射的右臂對應於人的左臂,反之亦然。

——————————

**於leetcode官方題解。其c++**如下:

/**

1. definition for a binary tree node.

2. struct treenode

7. };

*/class

solution

bool

issymmetric

(treenode* root) # 主函式

};

時間複雜度:o(n

)o(n)

o(n)

,因為我們遍歷整個輸入樹一次,所以總的執行時間為 o(n

)o(n)

o(n)

,其中 n 是樹中結點的總數。

空間複雜度:遞迴呼叫的次數受樹的高度限制。在最糟糕情況下,樹是線性的,其高度為 o(n

)o(n)

o(n)

。因此,在最糟糕的情況下,由棧上的遞迴呼叫造成的空間複雜度為 o(n

)o(n)

o(n)

。(一般的遞迴演算法就要有o(n

)o(n)

o(n)

的空間複雜度了,因為每次遞迴都要儲存返回資訊)

解法二:迭代法。可以利用佇列進行迭代。佇列中每兩個連續的結點應該是相等的,而且它們的子樹互為映象。最初,佇列中包含的是 root 以及 root。該演算法的工作原理類似於 bfs,但存在一些關鍵差異。每次提取兩個結點並比較它們的值。然後,將兩個結點的左右子結點按相反的順序插入佇列中。當隊列為空時,或者我們檢測到樹不對稱(即從佇列中取出兩個不相等的連續結點)時,該演算法結束。

/**

1. definition for a binary tree node.

2. struct treenode

7. };

*/class

solution

return

true;}

};

時間複雜度:o(n)o(n),因為我們遍歷整個輸入樹一次,所以總的執行時間為 o(n)o(n),其中 nn 是樹中結點的總數。

空間複雜度:搜尋佇列需要額外的空間。在最糟糕情況下,我們不得不向佇列中插入 o(n)o(n) 個結點。因此,空間複雜度為 o(n)o(n)。

LeetCode 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 說明 如果你可以遞迴地和迭代地解決它就獎勵你點數。建立乙個映象的樹,然...

LeetCode(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說明 如果你可以運用遞迴和迭代兩種方法解決這個問題,會很加分。這道題也是劍指offer上的2...

leetcode 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思路 如果同時滿足下面的條件,兩個樹互為映象 它們的兩個根結點具有相同的值。每個樹的右子樹都...