Python 樹 Node Depth 節點深度

2021-10-20 08:21:18 字數 2280 閱讀 8675

有乙個二叉樹,長這樣

1       

/ \

2 3

/ \ / \

4 5 6 7

/ \ / \ / \ / \

8 9 . . . . . .

寫乙個函式,返回所有節點深度值的和。

其中節點深度是乙個節點到根節點的距離,在這裡舉個例子,根節點是1 ,那麼值為2 的節點到根節點的距離是1.

此時應該得到的sum的結果是16。

可以使用乙個堆疊結構,首先將根節點以及他的深度depth的鍵值對儲存到堆疊中。

這裡乙個對子是乙個字典物件,乙個個的字典物件儲存在乙個stack的列表裡。

首先pop出乙個元素,將這個元素的深度累加到計數器中,

在字典中記錄下他的兩個孩子的相同資訊,顯然此時兩個孩子的depth相對於這個節點都要+1,如此往復,直到堆疊為空。

#build tree

defnodedepths

(root)

: sum_of_depth =

0 stack =

while

len(stack)

>0:

node_profile = stack.pop(

) node,depth = node_profile[

"node"

],node_profile[

"depth"

]if node is

none

:continue

print

(f"當前處理節點"

) sum_of_depth += depth

)if node.left is

notnone

:print) )

if node.right is

notnone

:print

)print

(stack)

return sum_of_depth

# this is the class of the input binary tree.

class

binarytree

:def

__init__

(self, value)

: self.value = value

self.left =

none

self.right =

none

a = binarytree(1)

b = binarytree(2)

c = binarytree(3)

a.left = b

a.right = c

d = binarytree(4)

e = binarytree(5)

b.left = d

b.right = e

f = binarytree(6)

g = binarytree(7)

c.left = f

c.right = g

h = binarytree(8)

i = binarytree(9)

d.left = h

d.right = i

print

(nodedepths(a)

)# output_array =

# print(a.breadthfirstsearch(array = output_array))

### time: o(v+e) v是圖的頂點(vertics),e是圖的edge

### space: o(v) v是返回的array的長度

# for index,element in enumerate(["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"]):

# print(f" = binarytree(\"\")")

# que = [1,2,3,4,5]

# print(que.pop(0))

當前處理節點1[,

]當前處理節點3[,

,]當前處理節點7[,

,,]當前處理節點6[,

,]當前處理節點2[,

]當前處理節點5[,

,]當前處理節點4[,

]當前處理節點9[,

,]當前處理節點8[,

]16[finished in

0.6s]

可以看到stack需要的儲存空間和數的高度一致。

python的字典樹

coding utf 8 字典樹測試 python沒有指標,但是可以用巢狀字典來實現樹結構.對於非ascii的單詞,統一用unicode編碼來插入與搜尋.classtrienode 這是節點 def init self 定義節點的資料結構,並初始化,設定標誌位判斷是否單詞是否是完整的存在於字典樹中 ...

python遍歷目錄樹

假定你希望對某個資料夾中的所有檔案改名,包括該資料夾中所有子資料夾中的所有檔案。也就是說,你希望遍歷目錄樹,處理遇到的每個檔案。寫程式完成這件事,可能需要一些技巧。好在,python 提供了乙個函式,替你處理這個過程。請看 c delicious 資料夾及其內容,如圖 9 1 所示。這裡有乙個例子程...

字首樹python實現

file name 字首樹.py class trienode object def init self self.path 0 路過此節點幾個 self.end 0 以此為結尾的幾個 self.map none for i in range 26 每乙個節點有26條路 class trie obj...