樹的定義
樹是一種重要的非線性數據結構,直觀地看,它是數據元素(在樹中稱為結點)按分支關系組織起來的結構,很象自然界中的樹那樣。樹結構在客觀世界中廣泛存在,如人類社會的族譜和各種社會組織機構都可用樹形象表示。樹在計算機領域中也得到廣泛應用,如在編譯源程序時,可用樹表示源程序的語法結構。又如在數據庫系統中,樹型結構也是信息的重要組織形式之一。一切具有層次關系的問題都可用樹來描述。
樹結構的特點是:它的每一個結點都可以有不止一個直接后繼,除根結點外的所有結點都有且只有一個直接前驅。
樹的遞歸定義如下:
- 至少有一個結點(稱為根)
- 其它是互不相交的子樹
二叉樹
二叉樹是由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)