二叉树的链表实现与遍历

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



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

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值