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.數的術語 節點 樹中的每乙個元素稱為乙個節點,節點是樹的基本組成部分。邊 邊也是樹的基本構成部分,邊有方向,連線兩節節點,並表示他們之間的聯絡。除了根節點外每個節點都有且有一條與其他節點相連的...