python 二叉树

简介:
class Node( object ): def __init__ ( self , data = None , left = None , right = None ): self .data = data self .left = left self .right = right class BTree( object ): def __init__ ( self , root = None ): self .root = root def is_empty( self ): if self .root is None : return True else : return False # 先序遍历(递归,recursion) def pre_order( self , node): if node is None : return print (node.data) self .pre_order(node.left) self .pre_order(node.right) # 中序遍历(递归) def in_order( self , node): if node is None : return self .in_order(node.left) print (node.data) self .in_order(node.right) # 后序遍历(递归) def post_order( self , node): if node is None : return self .post_order(node.left) self .post_order(node.right) print (node.data) # 先序遍历(非递归) def preorder( self , node): stack = [] while node or stack: if node is not None : print (node.data) stack.append(node) node = node.left else : node = stack.pop() node = node.right # 中序遍历(非递归) def inorder( self , node): stack = [] while node or stack: if node: stack.append(node) node = node.left else : node = stack.pop() print (node.data) node = node.right # 后序遍历(非递归) def postorder( self , node): stack = [] queue = [] queue.append(node) while queue: node = queue.pop() if node.left: queue.append(node.left) if node.right: queue.append(node.right) stack.append(node) while stack: print (stack.pop().data) # 水平遍历 def levelorder( self , node): if node is None : return queue = [node] while queue: node = queue.pop( 0 ) print (node.data) if node.left: queue.append(node.left) if node.right: queue.append(node.right) # 根据前序遍历和中序遍历,求后序遍历 def findTree( self , preList, midList, afterList): ''' preList = list('DBACEGF') midList = list('ABCDEFG') afterList = ['A', 'C', 'B', 'F', 'G', 'E', 'D'] ''' if len (preList) == 0 : return if len (preList) == 1 : afterList.append(preList[ 0 ]) return root = preList[ 0 ] n = midList.index(root) self .findTree(preList[ 1 :n +1 ], midList[:n], afterList) self .findTree(preList[n +1 :], midList[n +1 :], afterList) afterList.append(root) #return afterList ''' n1 = Node(data=1) n2 = Node(2,n1,None) n3 = Node(3) n4 = Node(4) n5 = Node(5,n3,n4) n6 = Node(6,n2,n5) n7 = Node(7,n6,None) n8 = Node(8) root = Node(0,n7,n8) ''' root = Node( 0 , Node( 7 , Node( 6 , Node( 2 , Node( 1 )), Node( 5 , Node( 3 ), Node( 4 )))), Node( 8 )) bt = BTree(root) print ( 'pre_order......' ) print (bt.pre_order(bt.root)) print ( 'in_order......' ) print (bt.in_order(bt.root)) print ( 'post_order.....' ) print (bt.post_order(bt.root)) preList = list ( 'DBACEGF' ) midList = list ( 'ABCDEFG' ) afterList = [] bt.findTree(preList, midList, afterList)

print(afterList)


本文转自罗兵博客园博客,原文链接:http://www.cnblogs.com/hhh5460/p/5887332.html,如需转载请自行联系原作者

相关文章
|
5月前
|
存储 算法 Python
python算法(三)——树、二叉树、AVL树
python算法(三)——树、二叉树、AVL树
33 0
|
5月前
|
算法 Python
Python算法——二叉树遍历
Python算法——二叉树遍历
85 0
|
3月前
|
C++ Python Java
Java每日一练(20230501) 路径交叉、环形链表、被围绕的区域
Java每日一练(20230501) 路径交叉、环形链表、被围绕的区域
35 0
Java每日一练(20230501) 路径交叉、环形链表、被围绕的区域
|
2月前
|
Python
使用python写一个二叉树
使用python写一个二叉树
23 1
|
3月前
|
Python 人工智能
讯飞星火、文心一言和通义千问同时编“贪吃蛇”游戏,谁会胜出?
讯飞星火、文心一言和通义千问同时编“贪吃蛇”游戏,谁会胜出?
51 1
讯飞星火、文心一言和通义千问同时编“贪吃蛇”游戏,谁会胜出?
|
3月前
|
算法 Java Go
Rust每日一练(Leetday0025) 矩阵置零、搜索二维矩阵、颜色分类
Rust每日一练(Leetday0025) 矩阵置零、搜索二维矩阵、颜色分类
34 0
Rust每日一练(Leetday0025) 矩阵置零、搜索二维矩阵、颜色分类
|
3月前
|
Java Go Python
【Python每日一练】总目录(2023.2.18~5.18)共90篇
【Python每日一练】总目录(2023.2.18~5.18)共90篇
195 0
【Python每日一练】总目录(2023.2.18~5.18)共90篇
|
3月前
|
算法 Python Java
Python每日一练(20230429) 地下城游戏、杨辉三角II、旋转数组
Python每日一练(20230429) 地下城游戏、杨辉三角II、旋转数组
36 0
Python每日一练(20230429) 地下城游戏、杨辉三角II、旋转数组
|
3月前
|
算法 C++ Python
Python每日一练(20230425) 多数元素、二叉树层序遍历II、最接近的三数之和
Python每日一练(20230425) 多数元素、二叉树层序遍历II、最接近的三数之和
27 0
Python每日一练(20230425) 多数元素、二叉树层序遍历II、最接近的三数之和
|
3月前
|
算法 C++ Python
Python每日一练(20230423) 链表倒数结点、最小子串、二叉树层序遍历
Python每日一练(20230423) 链表倒数结点、最小子串、二叉树层序遍历
27 0
Python每日一练(20230423) 链表倒数结点、最小子串、二叉树层序遍历