二叉樹的深度

2021-07-05 08:59:06 字數 3678 閱讀 6783

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

__author__ ='ll_ying'#

二叉樹的深度為根節點到最遠子節點的距離

'''可採用:廣度優先搜尋(bfs:breadth first search),又名寬度優先搜尋和深度優先搜尋(dfsdepth first search)兩種:廣度優先搜尋:屬於一種盲目的搜尋演算法,目的是系統的展開並檢查圖中的所有結果。換句話說,它並不會考慮結果可能的位置,徹底搜尋整個圖,直到找到結果為止。深度優先搜尋:每次深度搜尋的結果必然是圖的乙個連通分量。且可以從多節點發起。ps:將每個節點在深度優先搜尋中結束時間排序(具體方法是:創建乙個list,然後在每個節點的相鄰節點都被訪問的情況下,將節點加入到list結尾,然後逆轉整個鍊錶。),這樣就得到了所謂的拓撲排序。'''# recursively(

遞迴)dfs

# definition for a binary tree node

classtreenode:

def__init__(self

, x):

self.value = x

self.left = none

self.right = none

classsolution_1:

defmaxdepth(self

, root):

''':paramroot:treenode

:return:integer

'''if notroot:

return0

return1+max(self.maxdepth(root.left),

self.maxdepth(root.right))

# bfs+deque

classsolution_2:

defmaxdepth(self

, root):

if notroot:

return0

fromcollectionsimportdeque

deque = deque([(root,

1)])

whiledeque:

curr, val = deque.popleft()

if notcurr.leftand notcurr.rightand notdeque:

returnval

ifcurr.left:

ifcurr.right:

# dfs with explicit stack

classsolution_3:

defmaxdepth(self

, root):

res = 0

stack = [(root,

0)]whilestack:

node, level = stack.pop()

if notnode:

res = max(res, level)

else:

returnres

'''from collections import dequedeque(雙端佇列)提供更全面的數列操作,可以從左右兩邊運算元列python的邏輯操作符:1andx and y如果x為真,則y決定結果,返回y;如果x為假,x決定了結果為假,返回x即,x,y同時為真則為真,有乙個為假則為假。2or : x or y,and類似,x,y同時為假時結果為假,有乙個為真則為真3not :返回表示式結果的相反的值。如果表示式結果為真,則返回false如果表示式結果為假,則返回true'''

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

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

二叉樹的深度 二叉樹的深度 二叉樹最大寬度

題目 輸入一棵二叉樹的根節點,求該樹的深度。從根節點到葉節點依次經過的節點 含根 葉節點 形成樹的一條路徑,最長路徑的長度為樹的深度。例如 給定二叉樹 3,9,20,null,null,15,7 返回它的最大深度 3 根節點加上左右子樹的最大深度就是樹的最大深度。如下 class solution ...

二叉樹之 二叉樹深度

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