【Python排序搜索基本算法】之二叉树的遍历

        先给出二叉树节点的python表示:

class Node:
	def __init__(self,value=None,left=None,right=None):
		self.value=value
		self.left=left
		self.right=right

        再给出二叉树前序,中序,后序遍历:

def preTraverse(root):
	if root==None:
		return
	print(root.value)
	preTraverse(root.left)
	preTraverse(root.right)

def midTraverse(root):
	if root==None:
		return
	midTraverse(root.left)
	print(root.value)
	midTraverse(root.right)

def afterTraverse(root):
	if root==None:
		return
	afterTraverse(root.left)
	afterTraverse(root.right)
	print(root.value)

        然后给出一个例子:

        现在假设搞一个二叉树为(ps:ubuntu的Libre Draw还真好用~哈哈):

【Python排序搜索基本算法】之二叉树的遍历_第1张图片

if __name__=='__main__':
	root=Node('D',Node('B',Node('A'),Node('C')),Node('E',right=Node('G',Node('F'))))
	print('前序遍历:')
	preTraverse(root)
	print('\n')
	print('中序遍历:')
	midTraverse(root)
	print('\n')
	print('后序遍历:')
	afterTraverse(root)
	print('\n')

输出如下:

前序遍历:
DBACEGF

中序遍历:
ABCDEFG

后序遍历:
ACBFGED


        最后,来个小题感受一下~经典的已知前序遍历结果和中序遍历结果,求后序遍历,代码如下:

preList=list('DBACEGF')
midList=list('ABCDEFG')
afterList=[]

def findTree(preList,midList,afterList):
	if len(preList)==0:
		return
	if len(preList)==1:
		afterList.append(preList[0])
		return
	root=preList[0]
	n=midList.index(root)
	findTree(preList[1:n+1],midList[:n],afterList)
	findTree(preList[n+1:],midList[n+1:],afterList)
	afterList.append(root)

findTree(preList,midList,afterList)
print(afterList)

输出结果如下:

['A', 'C', 'B', 'F', 'G', 'E', 'D']

        可以看到,验证成功~


转载请注明:转自 http://blog.csdn.net/littlethunder/article/details/9707669

你可能感兴趣的:(算法,python,二叉树,遍历)