第六章二叉樹和樹(樹)

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章