树的定义
树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很象自然界中的树那样。树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构都可用树形象表示。树在计算机领域中也得到广泛应用,如在编译源程序时,可用树表示源程序的语法结构。又如在数据库系统中,树型结构也是信息的重要组织形式之一。一切具有层次关系的问题都可用树来描述。
树结构的特点是:它的每一个结点都可以有不止一个直接后继,除根结点外的所有结点都有且只有一个直接前驱。
树的递归定义如下:
- 至少有一个结点(称为根)
- 其它是互不相交的子树
二叉树
二叉树是由n(n≥0)个结点组成的有限集合、每个结点最多有两个子树的有序树。它或者是空集,或者是由一个根和称为左、右子树的两个不相交的二叉树组成。
特点:
- 二叉树是有序树,即使只有一个子树,也必须区分左、右子树;
- 二叉树的每个结点的度不能大于2,只能取0、1、2三者之一;
- 二叉树中所有结点的形态有5种:空结点、无左右子树的结点、只有左子树的结点、只有右子树的结点和具有左右子树的结点。
源代码:
#-*- encoding:utf-8 -*-
'''
树的构建:
5
6 7
8 9
'''
class Tree():
'树的实现'
def __init__(self,ltree = 0,rtree = 0,data = 0):
self.ltree = ltree
self.rtree = rtree
self.data = data
class BTree():
'二叉树的实现'
def __init__(self,base = 0):
self.base = base
def _Empty(self):
'是否为空树'
if self.base == 0:
return True
else:
return False
def qout(self,tree_base):
'前序遍历:根-左-右'
if tree_base == 0:
return
print tree_base.data
self.qout(tree_base.ltree)
self.qout(tree_base.rtree)
def mout(self,tree_base):
'中序遍历:左-根-右'
if tree_base == 0:
return
self.mout(tree_base.ltree)
print tree_base.data
self.mout(tree_base.rtree)
def hout(self,tree_base):
'后序遍历:左-右-根'
if tree_base == 0:
return
self.hout(tree_base.ltree)
self.hout(tree_base.rtree)
print tree_base.data
#test
tree1 = Tree(data=8)
tree2 = Tree(data=9)
tree3 = Tree(tree1,data=6)
tree4 = Tree(tree2,0,data=7)
base = Tree(tree3,tree4,5)
btree = BTree(base)
print '前序遍历结果:'
btree.qout(btree.base)
print '中序遍历结果:'
btree.mout(btree.base)
print '后序遍历结果:'
btree.hout(btree.base)