python實現二叉樹的遍歷

2021-08-11 05:11:14 字數 3929 閱讀 4425

先序:

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 ...