6.1抽象數據類型
#抽象數據類型
'''
ADT Tree: #一個樹抽象數據類型
Tree(self,data,forest) #構造操作,基於樹根數據和一組子樹
is_empty(self) #判斷是否爲一顆空樹
num_nodes(self) #求樹中結點個數
data(self) #取得樹根存儲的數據
first_child(self) #取得樹中結點node的第一顆子樹
children(self) #取得樹中結點node的各子樹的迭代器
set_first(self) #用tree取代原來的第一顆子樹
insert_child(self,i,tree) #將tree設置爲第i顆子樹,其他子樹順序後移
traversal(self) #遍歷樹中各結點之數據的迭代器
forall(self,op) #對樹中的每個結點的數據執行操作op
'''
6.2樹的python的list實現
#樹的python的list實現
class SubtreeIndexError(ValueError):
pass
def Tree(data,*subtrees):
a = [data]
a.extend(subtrees)
b = a
return b
def is_empty_Tree(tree):
return tree is None
def root01(tree):
return tree[0]
def subtree(tree,i):
if i < 1 or i > len(tree):
raise SubtreeIndexError
return tree[i+1]
def set_root01(tree,data):
tree[0] = data
def set_subtree(tree,i,subtree):
if i < 1 or i > len(tree):
raise SubtreeIndexError
tree[i+1] = subtree
tree1 = Tree('+',1,2,3)
tree2 = Tree('*',tree1,6,8)
set_subtree(tree1,2,Tree('+',3,5))
(結果如圖)
6.3樹類
'''
定義樹類
'''
#定義樹結點類。一項結點數據和一組子樹,一個數據域和一個子結點表域。
class TreeNode:
def __init__(self,data,subs=[]):
self._data = data
self._subtrees = list(subs)
def __str__(self):
return '[TreeNode {0} {1}]'.format(self._data,self._subtrees)
#樹類
class Tree:
def __init__(self):
self._root = None
self._subtrees = None
def is_empty(self):
return self._root is None
def root(self):
return self._root
def child(self,i):
if i < 0 or i > len(self._subtrees)-1:
raise SubtreeIndexError
return self._subtrees[i]
def set_child(self,i,subtree):
if i < 0 or i > len(self._subtrees):
raise SubtreeIndexError
self._subtrees[i] = subtree