python 实现数据结构 lesson 4 二叉树

本文探讨了如何使用Python生成二叉树并进行前序、中序和后序遍历,通过图形化的示例帮助理解遍历过程。具体代码实现了不同遍历方式,得到如下结果:前序遍历[1, 2, 4, 8, 9, 5, 10, 3, 6, 7],中序遍历[8, 4, 9, 2, 10, 5, 1, 6, 3, 7],后序遍历[8, 9, 4, 10, 5, 2, 6, 7, 3, 1]" 111066280,10295066,树莓派搭建B站直播点歌系统,"['Python', '树莓派开发', '直播技术', 'PHP开发', '音视频处理']
摘要由CSDN通过智能技术生成

一、二叉树的定义不再赘述,这里主要讨论的是生成二叉树的步骤和集中遍历方式。在这里,借鉴了几位大牛的遍历图形,

非常的深入简出,容易理解。

A. 前序遍历



B.中序遍历


C.后序遍历



以上三种方式,达成以下效果:



具体代码实现:

class Node(object):
    def __init__(self, data):
        self.data = data
        self.lchild = None
        self.rchild = None

class BinaryTree(object):
    def __init__(self):
        self.root = None

    def insert(self,data):
        node = Node(data)
        if self.root is None:
            self.root = node
        else:
            temp = [self.root]
            while True:#while temp行不行?
                p = temp.pop(0)
                if p.lchild is None:
                    p.lchild = node
                    return
                if p.rchild is None:
                    p.rchild = node
                    return
                temp.append(p.lchild)
                temp.append(p.rchild)

    def traverse(self):
        if self.root is None:
            return None
        temp = [self.root]
        data_list = []
        while len(temp)>0:#while len(tem) > 0: s
            cur = temp.pop(0)
            data_list.append(cur.data)
            if cur.lchild is not None:
                temp.append(cur.lchild)

            if cur.rchild is not None:
                temp.append(cur.rchild)

        print(data_list)

    def height(self,root):
        if self.root is None:
            return 0
        ldepth = self.height(root.lchild)
        rdepth = self.height(root.rchild)
        return max(ldepth,rdepth) + 1
    def depth(self,root):
        return self.height(root)-1

    def preorder(self,root):
        temp = []
        if root is None:
            return []
        temp.append(root.data)
        llist = self.preorder(root.lchild)
        rlist = self.preorder(root.rchild)
        return temp + llist + rlist

    def inorder(self,root):
        temp = []
        if root is None:
            return []
        llist = self.inorder(root.lchild)
        temp.append(root.data)
        rlist = self.inorder(root.rchild)
        return llist + temp + rlist

    def postorder(self,root):
        temp = []
        if root is None:
            return []
        llist = self.postorder(root.lchild)
        rlist = self.postorder(root.rchild)
        temp.append(root.data)
        return llist + rlist + temp

binary_tree = BinaryTree()
for i in range(1, 11):
    binary_tree.insert(i)
binary_tree.traverse()
print('*****preorder result*****')
print(binary_tree.preorder(binary_tree.root))

print('*****inorder result*****')
print(binary_tree.inorder(binary_tree.root))

print('*****postorder result*****')
print(binary_tree.postorder(binary_tree.root))


结论如下:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
*****preorder result*****
[1, 2, 4, 8, 9, 5, 10, 3, 6, 7]
*****inorder result*****
[8, 4, 9, 2, 10, 5, 1, 6, 3, 7]
*****postorder result*****
[8, 9, 4, 10, 5, 2, 6, 7, 3, 1]


Process finished with exit code 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值