
二叉樹(shù)的深度算法
定義
- 二叉樹(shù)的深度:從根節(jié)點(diǎn)到最遠(yuǎn)葉子節(jié)點(diǎn)的最長(zhǎng)路徑上的節(jié)點(diǎn)數(shù)。
- 葉子節(jié)點(diǎn):沒(méi)有子節(jié)點(diǎn)的節(jié)點(diǎn)。
算法思路
-
遞歸方法:
- 如果當(dāng)前節(jié)點(diǎn)為空,返回0。
- 否則,遞歸計(jì)算左子樹(shù)和右子樹(shù)的深度,取較大值加1。
-
非遞歸方法(層次遍歷):
- 使用隊(duì)列進(jìn)行層次遍歷。
- 每遍歷一層,深度加1,直到隊(duì)列為空。
遞歸方法實(shí)現(xiàn)
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def maxDepth(root: TreeNode) -> int:
if root is None:
return 0
else:
left_depth = maxDepth(root.left)
right_depth = maxDepth(root.right)
return max(left_depth, right_depth) + 1
非遞歸方法實(shí)現(xiàn)
from collections import deque
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def maxDepth(root: TreeNode) -> int:
if root is None:
return 0
queue = deque([root])
depth = 0
while queue:
level_size = len(queue)
for _ in range(level_size):
node = queue.popleft()
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
depth += 1
return depth
復(fù)雜度分析
- 時(shí)間復(fù)雜度:
- 遞歸方法:O(n),每個(gè)節(jié)點(diǎn)訪問(wèn)一次。
- 非遞歸方法:O(n),每個(gè)節(jié)點(diǎn)訪問(wèn)一次。
- 空間復(fù)雜度:
- 遞歸方法:O(h),h是樹(shù)的高度,最壞情況下為O(n)。
- 非遞歸方法:O(w),w是樹(shù)的最大寬度,最壞情況下為O(n)。
示例
假設(shè)有一棵如下所示的二叉樹(shù):
1
/ \
2 3
/ \
4 5
-
遞歸方法:
maxDepth(1)
= max(maxDepth(2)
, maxDepth(3)
) + 1
maxDepth(2)
= max(maxDepth(4)
, maxDepth(5)
) + 1
maxDepth(4)
= 0
maxDepth(5)
= 0
maxDepth(2)
= max(0, 0) + 1 = 1
maxDepth(3)
= 0
maxDepth(1)
= max(1, 0) + 1 = 2
-
非遞歸方法:
總結(jié)
- 遞歸方法:簡(jiǎn)潔易懂,但可能在深度較大的樹(shù)上導(dǎo)致棧溢出。
- 非遞歸方法:適用于任何深度的樹(shù),但需要額外的空間來(lái)存儲(chǔ)隊(duì)列。
希望這些內(nèi)容對(duì)你有所幫助!如果你有任何問(wèn)題或需要進(jìn)一步的解釋,請(qǐng)隨時(shí)告訴我。
為大家推薦園林中7大類50種常見(jiàn)的植物品種,未竟事宜,敬請(qǐng)電訊。
彩葉植物
1、日本紅楓 (春季紅 2~5米高)
2、中國(guó)紅楓 (三季紅 2~5米高)
3.美國(guó)紅楓 (大喬木10~40米)
藤本植物
1.阿知紫藤
2.熊野紫藤
3.八重黑龍紫藤
4.安了寺紫藤
松柏類植物
1、刺松
2、圓柏
3、黑松
水生植物
1.蘆葦苗
2.荷花苗
3.菖蒲
竹類植物
1.青竹
2.紫竹
3.金鑲玉竹
大喬木行道樹(shù)類
1.法桐 (世界級(jí)的行道樹(shù))
2.垂柳 (生長(zhǎng)快,樹(shù)冠濃密,綠期長(zhǎng),耐寒)
3.白玉蘭 (春花)
草坪草類植物
1.百慕大種子
2.早熟禾種子
3.高羊茅種子
4.剪股穎種子
5.馬尼拉草坪
6.果嶺草種子
7.黑麥草種子
花草類植物
1.金盞菊種子
2.石竹種子(可代替草坪的花卉,適宜密植,耐熱耐旱)
3.格?;ǚN子 (純潔樸素的野花系列,好養(yǎng)好看)
4.矢車(chē)菊種子
5.雛菊種子
6.福祿考種子
7.含羞草種子 (奇異植物,會(huì)動(dòng)的植物)
8.黑心菊種子 (狀若葵花,黑心黃花)