二叉樹的深度 Day47 求二叉樹最小深度

2021-10-12 07:54:09 字數 2080 閱讀 5810

給定乙個二叉樹,找出其最小深度。

最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。

說明: 葉子節點是指沒有子節點的節點。

示例:

給定二叉樹 [3,9,20,null,null,15,7],

返回它的最小深度  2.

補全下面**:

# definition for a binary tree node.

# class treenode(object):

#     def __init__(self, x):

#         self.val = x

#         self.left = none

#         self.right = none

class solution(object):

def mindepth(self, root):

""":type root: treenode

:rtype: int

"""

分析過程的開始,我們先看乙個錯誤的求解,並說明為什麼它是錯誤的:

class solution(object):

def mindepth(self, root):

""":type root: treenode

:rtype: int

"""if not root:

return 0 

if not root.left and not root.right:

return 1

return 1 + min(self.mindepth(root.left),self.mindepth(root.right))

考慮下面二叉樹:

使用以上**返回最小深度為 1,其實最小深度為 2,因為最小深度的定義為:從根節點到最近葉子節點的最短路徑上的節點數量。

為什麼上面的解有問題呢?

原因在於遞迴基選取有問題,只考慮了下面兩種情況:

二叉樹為 none

二叉樹只有乙個節點

遞迴基未考慮下面兩種情況,所以導致出錯:

# 遞迴基的下面兩種情況必須考慮進去:    

if not root.left:

return 1 + self.mindepth(root.right)

if not root.right:

return 1 + self.mindepth(root.left)

正確的完整**如下:

class solution(object):

def mindepth(self, root):

if not root:

return 0 

if not root.left and not root.right:

return 1

# 遞迴基的下面兩種情況必須考慮進去:    

if not root.left:

return 1 + self.mindepth(root.right)

if not root.right:

return 1 + self.mindepth(root.left)

return 1 + min(self.mindepth(root.left),self.mindepth(root.right))

《end》

歡迎加入星球,從零學程式設計師必備演算法,每天在星球內記錄學習過程、學習星友超讚的回答,加入後領取前45天的150頁演算法刷題日記pdf總結。

二叉樹(三)求二叉樹的深度

採用先序法建立一棵二叉樹,設計求該二叉樹的深度,二叉樹的資料域型別為字元型,擴充套件二叉樹的葉子結點用 表示,要求可以求多棵二叉樹的深度,當二叉樹的深度為0時程式結束。輸入描述 迴圈輸入多棵擴充套件二叉樹的先序遍歷序列,每棵樹佔一行,以回車結束,每棵二叉樹中結點之間以空格隔開輸出描述 輸出各二叉樹的...

二叉樹之 二叉樹深度

二叉樹深度 獲取最大深度 public static int getmaxdepth treenode root 二叉樹寬度 使用佇列,層次遍歷二叉樹。在上一層遍歷完成後,下一層的所有節點已經放到佇列中,此時佇列中的元素個數就是下一層的寬度。以此類推,依次遍歷下一層即可求出二叉樹的最大寬度 獲取最大...

二叉樹的深度 二叉樹的深度

題目描述輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。及測試用例 單步除錯檢視過程 public class solution19 拿到左子樹的最大深度 int leftdep treedepth root.left 拿到右子...