左孩子右兄弟表示法的任意有根樹的遍歷

2021-10-09 06:57:13 字數 2205 閱讀 4825

演算法導論 p.248 10.4-4

題目描述:對於乙個含n個結點的任意有根樹,寫出乙個o(n)時間的過程,輸出其所有關鍵字,該樹以左孩子右兄弟表示法儲存。

與二叉樹的遍歷類似

class

tree

:def

__init__

(self, val)

: self.val = val

self.left_child =

none

self.right_bro =

none

class

solution

:def

getallnodefromtreebystack

(self, tree=tree)

-> list[

int]:if

not self:

return

reslist, stack =

,list()

while stack:

node = stack.pop(

)if node.right_bro:

if node.left_child:

return reslist

class

solution

:def

getallnodefromtreebyqueue

(self, tree=tree)

-> list[

int]:if

not self:

return

reslist, queue =

, collections.deque(

)while queue:

node = queue.popleft(

)if node.right_bro:

if node.left_child:

return reslist

class

solution

:def

getallnodefromtreebyrecursion

(self, tree=tree)

-> list[

int]:if

not self:

return

reslist =

if tree:

if tree.right_bro:

reslist.extend(solution.getallnodefromtreebyrecursion(self=self, tree=tree.right_bro)

)if tree.left_child:

reslist.extend(solution.getallnodefromtreebyrecursion(self=self, tree=tree.left_child)

)return reslist

if __name__ ==

'__main__'

: tree = tree(0)

tree.left_child = tree(10)

tree.left_child.right_bro = tree(12)

tree.left_child.right_bro.right_bro = tree(-1

) tree.left_child.right_bro.right_bro.right_bro = tree(93)

tree.left_child.right_bro.right_bro.right_bro.left_child = tree(

100)

print

(solution.getallnodefromtreebystack(self=tree, tree=tree)

)# [0, 10, 12, -1, 93, 100]

print

(solution.getallnodefromtreebyqueue(self=tree, tree=tree)

)# [0, 10, 12, -1, 93, 100]

print

(solution.getallnodefromtreebyrecursion(self=tree, tree=tree)

)# [0, 10, 12, -1, 93, 100]

左孩子右兄弟的字典樹

一般寫的字典樹都是雙陣列的形式,但是當字元的數量很多時,就會占用大量的記憶體,初始化操作也會變慢。這時,就可以用左孩子右兄弟的寫法,來以時間換空間。下面是自己寫的乙個 1 include 2 include 3 include 4 5using namespace std 67 const int ...

樹的雙親表示法,孩子表示法以及孩子兄弟表示法

目錄如下圖所示,這是一棵普通的樹,該如何儲存呢?通常,儲存具有普通樹結構資料的方法有 3 種 雙親表示法 孩子表示法 孩子兄弟表示法 圖1雙親表示法採用順序表 也就是陣列 儲存普通樹,其實現的核心思想是 順序儲存各個節點的同時,給各節點附加乙個記錄其父節點位置的變數。注意,根節點沒有父節點 父節點又...

樹 孩子兄弟表示法的實現

樹狀圖是一種資料結構,它是由n n 1 個有限節點組成乙個具有層次關係的集合。把它叫做 樹 是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。它具有以下的特點 每個節點有零個或多個子節點 沒有父節點的節點稱為根節點 每乙個非根節點有且只有乙個父節點 除了根節點外,每個子節點可以分為多個不...