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