二叉树的链表实现与遍历

二叉树是一种数据结构,我们知道,数组列表的查找效率高,但是插入或删除的效率低,链表则相反,而树的效率则刚好折中,集合了链表和数组的特性,特殊的是,它作为一种非线性表,也有自身的优势。
关键思想:指针,递归
思想:将其递归寻找其自身的左右分枝并打印,停止条件:如果自身为空



"""
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

 

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