先序:
1.訪問根結點
2.訪問左子樹
3.訪問右子樹
中序:
1.訪問左子樹
2.訪問根結點
3.訪問右子樹
後序:
1.訪問左子樹
2.訪問右子樹
3.訪問根結點
"""節點類"""
def__init__
(self, elem=-1, lchild=none, rchild=none):
self.elem = elem
self.lchild = lchild
self.rchild = rchild
class
tree
(object):
"""樹類"""
def__init__
(self):
self.root = node()
self.myqueue =
defadd(self, elem):
"""為樹新增節點"""
node = node(elem)
if self.root.elem == -1: # 如果樹是空的,則對根節點賦值
self.root = node
else:
treenode = self.myqueue[0] # 此結點的子樹還沒有齊。
if treenode.lchild == none:
treenode.lchild = node
else:
treenode.rchild = node
self.myqueue.pop(0) # 如果該結點存在右子樹,將此結點丟棄。
deffront_digui
(self, root):
"""利用遞迴實現樹的先序遍歷"""
if root == none:
return
print root.elem,
self.front_digui(root.lchild)
self.front_digui(root.rchild)
defmiddle_digui
(self, root):
"""利用遞迴實現樹的中序遍歷"""
if root == none:
return
self.middle_digui(root.lchild)
print root.elem,
self.middle_digui(root.rchild)
deflater_digui
(self, root):
"""利用遞迴實現樹的後序遍歷"""
if root == none:
return
self.later_digui(root.lchild)
self.later_digui(root.rchild)
print root.elem,
deffront_stack
(self, root):
"""利用堆疊實現樹的先序遍歷"""
if root == none:
return
mystack =
node = root
while node or mystack:
while node: #從根節點開始,一直找它的左子樹
print node.elem,
node = node.lchild
node = mystack.pop() #while結束表示當前節點node為空,即前乙個節點沒有左子樹了
node = node.rchild #開始檢視它的右子樹
defmiddle_stack
(self, root):
"""利用堆疊實現樹的中序遍歷"""
if root == none:
return
mystack =
node = root
while node or mystack:
while node: #從根節點開始,一直找它的左子樹
node = node.lchild
node = mystack.pop() #while結束表示當前節點node為空,即前乙個節點沒有左子樹了
print node.elem,
node = node.rchild #開始檢視它的右子樹
deflater_stack
(self, root):
"""利用堆疊實現樹的後序遍歷"""
if root == none:
return
mystack1 =
mystack2 =
node = root
while mystack1: #這個while迴圈的功能是找出後序遍歷的逆序,存在mystack2裡面
node = mystack1.pop()
if node.lchild:
if node.rchild:
while mystack2: #將mystack2中的元素出棧,即為後序遍歷次序
print mystack2.pop().elem,
deflevel_queue
(self, root):
"""利用佇列實現樹的層次遍歷"""
if root == none:
return
myqueue =
node = root
while myqueue:
node = myqueue.pop(0)
print node.elem,
if node.lchild != none:
if node.rchild != none:
if __name__ == '__main__':
"""主函式"""
elems = range(10) #生成十個資料作為樹節點
tree = tree() #新建乙個樹物件
for elem in elems:
tree.add(elem) #逐個新增樹的節點
print
'佇列實現層次遍歷:'
tree.level_queue(tree.root)
print
'\n\n遞迴實現先序遍歷:'
tree.front_digui(tree.root)
print
'\n遞迴實現中序遍歷:'
tree.middle_digui(tree.root)
print
'\n遞迴實現後序遍歷:'
tree.later_digui(tree.root)
print
'\n\n堆疊實現先序遍歷:'
tree.front_stack(tree.root)
print
'\n堆疊實現中序遍歷:'
tree.middle_stack(tree.root)
print
'\n堆疊實現後序遍歷:'
tree.later_stack(tree.root)
二叉樹的遍歷 python實現)
目錄 二 前序遍歷 三 中序遍歷 四 後序遍歷 輸入根節點,使用佇列來遍歷。先進的節點會先出去,出去時將自己的子節點放到佇列中。def level root if not root return none queue root res while queue node queue.pop 0 if ...
python遍歷二叉樹
定義二叉樹 class treenode def init self,x self.val x self.left none self.right none 構建二叉樹 返回構造的treenode根節點 defreconstructbinarytree self,pre,tin ifnot pre ...
python實現二叉樹深度遍歷
其實深度優先遍歷你可以把它看成是前序遍歷,比如對於如下二叉樹 其深度遍歷的結果是 1,2,4,8,9,5,3,6,7 一 採用遞迴的方式進行遍歷。二 利用棧,先將根入棧,再將根出棧,並將根的右子樹,左子樹存入棧,按照棧的先進後出規則來實現深度優先遍歷。class node 節點類 def init ...