劍指offer 16 二叉樹的深度 python

2021-09-24 16:35:54 字數 1611 閱讀 7392

題目描述

輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。

遞迴方法

二叉樹的深度等於其左右子樹深度中更大的那個+1

這樣就可以不斷的求二叉樹的左右子樹的深度,一直到葉節點

構成遞迴條件

# -*- coding:utf-8 -*-

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class solution:

def treedepth(self, proot):

# write code here

if not proot:

return 0

nleft = self.treedepth(proot.left)

nright = self.treedepth(proot.right)

if nleft>nright:

return nleft+1

else:

return nright+1

遞迴方法更簡單的寫法

class solution:

def treedepth(self, proot):

if proot==none:return 0

return max(self.treedepth(proot.left),self.treedepth(proot.right))+1

非遞迴的方法

使用佇列完成

求樹的深度,可以從層次遍歷出發考慮

層次遍歷可以使用佇列完成,也可以使用遞迴完成,所以有兩種方法

class solution:

# 層次遍歷

def levelorder(self, root):

# write your code here

# 儲存最後層次遍歷的結果

res =

# 層數

count = 0

# 如果根節點為空,則返回空列表

if root is none:

return count

# 模擬乙個佇列儲存節點

q =

# 首先將根節點入隊

# 列表為空時,迴圈終止

while len(q) != 0:

# 使用列表儲存同層節點

tmp =

# 記錄同層節點的個數

length = len(q)

for i in range(length):

# 將同層節點依次出隊

r = q.pop(0)

if r.left is not none:

# 非空左孩子入隊

if r.right is not none:

# 非空右孩子入隊

if tmp:

count += 1 # 統計層數

return count

劍指offer 二叉樹的深度

輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。如果二叉樹只有根節點那麼深度就是1,如果只有左子樹,那麼就是左子樹的深度加1就是整棵二叉樹的深度 如果只有右子樹,那麼二叉樹的深度就是右子樹的深度加1 如果既有左子樹又有右子樹,那...

劍指offer 二叉樹的深度

輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。思路 面對樹形結構,我們常用的演算法就是遞迴,根樹的每一塊子樹都可以看成一棵小的完整的樹,這位我們解題提供了很好的思路。如果一開始傳入的就是空的那麼深度就是0,如果不是0,那麼這顆...

劍指offer 二叉樹的深度

class solution def treedepth self,proot write code here if proot none return 0 return max 1 self.treedepth proot.left 1 self.treedepth proot.right 非常簡...