Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
本文实例讲述了Python二叉树的遍历操作。分享给大家供大家参考,具体如下:
#coding:utf-8
"""
@encoding:utf-8
@author:lixiang
@email:lixiang_cn@foxmail.com
@python_version:2
@time:2018/4/110:09
@more_info:
二叉树是有限个元素的集合,该集合或者为空、或者有一个称为根节点(root)的元素及两个互不相交的、分别被称为左子树和右子树的二叉树组成。
1二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。
2二叉树的第i层至多有2^{i-1}个结点
3深度为k的二叉树至多有2^k-1个结点;
4对任何一棵二叉树T,如果其终端结点数为N0,度为2的结点数为N2,则N0=N2+1
5度是二叉树分支树,对于二叉树而言有0,1,2三种取值
不管是前中后序遍历,都是在当前规则下,无路可走时,输出根结点。
"""
classTreeNode(object):
def__init__(self,x,left=None,right=None):
self.val=x
self.left=left
self.right=right
defpre_traverse(root):
"""
根左右
:paramroot:
:return:
"""
ifnotroot:
return
printroot.val,
pre_traverse(root.left)
pre_traverse(root.right)
defmid_travese(root):
"""
左根右
:paramroot:
:return:
"""
ifnotroot:
return
mid_travese(root.left)
printroot.val,
mid_travese(root.right)
defafter_travese(root):
"""
左右根
:paramroot:
:return:
"""
ifnotroot:
return
after_travese(root.left)
after_travese(root.right)
printroot.val,
deflevel_travese(root):
ifnotroot:
return
queue=[]
queue.append(root)
whilequeue:
cur=queue.pop(0)
printcur.val,
ifcur.left:
queue.append(cur.left)
ifcur.right:
queue.append(cur.right)
defdepth(root):
ifnotroot:
return0
left=depth(root.left)
right=depth(root.right)
returnmax(left,right)+1
if__name__=='__main__':
"""
tree是一个表示树根节点的对象
前序遍历1245891136710
中序遍历4285119163107
后序遍历4811952610731
层序遍历1234567891011
深度5
"""
tree=TreeNode(1,TreeNode(2,TreeNode(4),TreeNode(5,TreeNode(8),TreeNode(9,left=TreeNode(11)))),TreeNode(3,TreeNode(6),TreeNode(7,left=TreeNode(10))))
print("\n前序遍历")
pre_traverse(tree)
print("\n中序遍历")
mid_travese(tree)
print("\n后序遍历")
after_travese(tree)
print("\n层序遍历")
level_travese(tree)
print("\n深度")
print(depth(tree))
运行结果:
前序遍历
1245891136710
中序遍历
4285119163107
后序遍历
4811952610731
层序遍历
1234567891011
深度
5
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python编码操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。