樹的python實現

2021-10-04 11:55:19 字數 3660 閱讀 2091

from collections import deque

import queue

class

treenode()

:def

__init__

(self, x)

: self.val = x

self.left=

none

self.right=

none

class

tree

(object):

"""docstring for tree"""

def__init__

(self)

:super

(tree, self)

.__init__(

) self.root =

none

#樹是由根節點表示的

defconstruct_tree

(self,values=

none):

#給定乙個陣列構造樹

ifnot values:

return

none

self.root=treenode(values[0]

) que=deque(

) size=

len(values)

nums=

1while numsnode=que.popleft(

)#最先進佇列的出佇列

if node:

# 結點非空

node.left=treenode(values[nums]

)if nums+

1#最後乙個節點是右節點,nums+1為當前左子節點,當前左子節點不是最後乙個節點,即當前的節點還有右子節點

node.right=treenode(values[nums+1]

) nums+=

1#統計了右子節點了

nums+=

1#統計了左子節點了

#廣度優先遍歷

defbfs

(self)

: lst=

queue=deque(

[self.root]

)while queue:

node=queue.popleft(

)if node:

return lst

#分層的層次遍歷

defbfs_

(self)

: levels =

ifnot self.root:

return levels

level =

0 que = deque(

)while que:

# start the current level

)# number of elements in the current level

level_length =

len(que)

for i in

range

(level_length)

: node = que.popleft(

) levels[level]

if node.left:

if node.right:

level +=

1return levels

#前序遍歷

defpreorder

(self)

: lst =

deforder

(head):if

not head:

return

order(head.left)

order(head.right)

order(self.root)

return lst

#中序遍歷

defmidorder

(self)

: lst =

deforder

(head):if

not head:

return

order(head.left)

order(head.right)

order(self.root)

return lst

#後序遍歷

defendorder

(self)

: lst =

deforder

(head):if

not head:

return

order(head.left)

order(head.right)

order(self.root)

return lst

#判斷是否對稱_遞迴

defissymmetric

(self):if

not self.root:

return

true

defleqr

(lnode,rnode)

:if lnode or rnode:

if rnode and lnode:

if lnode.val==rnode.val:

return leqr(lnode.left,rnode.right)

and leqr(lnode.right,rnode.left)

else

:return

false

else

:return

false

else

:return

true

return

(leqr(self.root.left,self.root.right)

)#判斷是否對稱_迭代

defissymmetric_

(self):if

not self.root:

return

true

que=queue.queue(

) que.put(self.root)

que.put(self.root)

while

(not que.empty())

: lnode=que.get(

) rnode=que.get(

)if lnode==

none

and rnode==

none

:continue

if lnode==

none

or rnode==

none

:return

false

if lnode.val!=rnode.val:

return

false

que.put(lnode.left)

que.put(rnode.right)

que.put(lnode.right)

que.put(rnode.left)

return

true

#test

root =[1

,2,none,3

,none,4

,none,5

]t=tree(

)t.construct_tree(root)

print

(t.bfs())

print

(t.bfs_(

))

————————————————

積跬步,以至千里

python實現樹的遍歷

二叉樹的遍歷是指按照某種順序依次訪問樹中的所有節點一次。四種遍歷方式分別是 先序遍歷 中序遍歷 後序遍歷 層序遍歷。其中前三種屬於深度優先遍歷 dfs 後一種屬於廣度優先遍歷 bfs 首先宣告節點類 class treenode def init self,x self.val x self.lef...

字首樹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...

樹的詳解及python實現

1.樹不是線性結構,是非線性的。2.樹在電腦科學裡應用廣泛,包括作業系統,圖形學,資料庫和計算機網路等。3.數的術語 節點 樹中的每乙個元素稱為乙個節點,節點是樹的基本組成部分。邊 邊也是樹的基本構成部分,邊有方向,連線兩節節點,並表示他們之間的聯絡。除了根節點外每個節點都有且有一條與其他節點相連的...