二叉樹的鏈表實現與遍歷

二叉樹是一種數據結構,我們知道,數組列表的查找效率高,但是插入或刪除的效率低,鏈表則相反,而樹的效率則剛好折中,集合了鏈表和數組的特性,特殊的是,它作爲一種非線性表,也有自身的優勢。
關鍵思想:指針,遞歸
思想:將其遞歸尋找其自身的左右分枝並打印,停止條件:如果自身爲空



"""
the tree test and compile

"""
#the class of the tree node
class TreeNode():                             #節點類,包含了左子樹,右子樹,和數據
    def __init__(self,data = None, left =None, right = None):
        self.data = data
        self.left = left
        self.right = right
#the class of the binary tree
class Binarytree():                          #樹類,有且只有唯一的根爲root
    def __init__(self, root = None):
        self.root = root
    def is_empty(self):                 #判斷根是否爲空,證明樹是否空
        if self.root == None:
            return True
        return False
    # pre_traversal                     
    def pre_traversal(self,node):        #前序法搜索,先打印,再遞歸其左右樹
        if node is None:
            return
        print(node.data,end = ' ')
        self.pre_traversal(node.left)
        self.pre_traversal(node.right)

    #inorder traversal                 #中序
    def in_traversal(self,node):
        if node is None:
            return
        self.post_traversal(node.left)
        print(node.data, end = ' ')
        self.post_traversal(node.right)


    #post traversal                 #後序,運行到最後纔打印
    def post_traversal(self,node):
        if node is None:
            return
        self.post_traversal(node.left)
        self.post_traversal(node.right)
        print(node.data, end = ' ')

if __name__ == "__main__":                 #測試
    b = TreeNode('B')
    f = TreeNode('F')
    g = TreeNode('G')
    d = TreeNode('D',f,g)
    i = TreeNode('I')
    h = TreeNode('H')
    e = TreeNode('E', i, h)
    c = TreeNode('C', d, e)
    a = TreeNode('A', b, c)

    bt = Binarytree(a)
    bt.pre_traversal(bt.root)
    print('\n')
    bt.post_traversal(bt.root)
    print('\n')
bt.in_traversal(bt.root)




測試結果:正常 ,實現了二叉樹的順序遍歷

A B C D F G E I H 

B F G D I H E C A 

B A F G D I H E C 
Process finished with exit code 0

 

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