# -*-coding:utf-8-*-__author__ ='ll_ying'#
二叉樹的深度為根節點到最遠子節點的距離
'''可採用:廣度優先搜尋(bfs:breadth first search),又名寬度優先搜尋和深度優先搜尋(dfs:depth 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的邏輯操作符:1、and:x and y如果x為真,則y決定結果,返回y;如果x為假,x決定了結果為假,返回x。即,x,y同時為真則為真,有乙個為假則為假。2、or : x or y,與and類似,x,y同時為假時結果為假,有乙個為真則為真3、not :返回表示式結果的「相反的值」。如果表示式結果為真,則返回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 二叉樹寬度 使用佇列,層次遍歷二叉樹。在上一層遍歷完成後,下一層的所有節點已經放到佇列中,此時佇列中的元素個數就是下一層的寬度。以此類推,依次遍歷下一層即可求出二叉樹的最大寬度 獲取最大...