记录从准研一假期自学PYTHON的全过程day13(二叉树)

90 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情

也是暑假自学python的第13天

今天学习二叉树相关的学习

二叉树

二叉树是每个节点最多有两个树的树形结构,二叉树常常被用于实现二叉查找树和二叉堆,二叉树的每个节点最多只有两棵子树,二叉树的子树有左右之分。

二叉树的性质: 1.二叉树的第i层最多有2^(i-1)个节点 2.深度为k的二叉树最多有2^k-1个节点 3.完全二叉树特点:最后一层有空节点并且空缺在右边...

代码学习二叉树:

class Node(object):
    # 节点类
    def __init__(self, elem=-1, lchild=None, rchild=None):
        self.elem = elem
        self.lchild = lchild
        self.rchild = rchild


# 建树

class Tree:
    def __init__(self):
        self.root = None
        self.queue = []

    def build_tree(self, element):
        new_node = Node(element)
        # 新元素放入队列中
        self.queue.append(new_node)
        # 新元素放入树中
        if self.root is None:
            self.root = new_node
        else:
            if self.queue[0].lchild is None:
                self.queue[0].lchild = new_node
            elif self.queue[0].rchild is None:
                self.queue[0].rchild = new_node
                self.queue.pop(0)  # 全满则弹出这个节点

    def preorder(self, node):
        if node:
            print(node.elem, end='')
            self.preorder(node.rchild)
            self.preorder(node.lchild)

    def midorder(self, node):
        if node:
            self.midorder(node.lchild)
            print(node.elem, end='')
            self.preorder(node.lchild)

    def lastorder(self, node):
        if node:
            self.lastorder(node.lchild)
            self.lastorder(node.rchild)
            print(node.elem, end='')


if __name__ == '__main__':
    tree = Tree()
    for i in 'abcdefghijhi':
        tree.build_tree(i)
    tree.preorder(tree.root)
    print()
    tree.midorder(tree.root)
    print()
    tree.lastorder(tree.root)
    print()

代码浅析:

首先建立class Node用来建立树的节点,树的节点初始赋值为-1,创建左右结点。

建树的过程中,我们首先建立一个队列,这个队列用来确定在树的插入过程中节点的顺序,每当确定完插入的右子树以及为满的时候就将这个节点pop。

最后就是写三个遍历方法。

在main函数的使用过程中,实例化一个对象tree,导入的根节点就是tree.node。

在写遍历的方法过程中,python想要递归调用的话,需要self.order来进行调用,而不能直接order()。

时间复杂度

O(n)用来表示时间复杂度,对于算法来说时间复杂度非常重要。

O(1)<log2n<n^1/2<O(n)<nlog2n<n^2<2^n<n!

明天开始学习排序算法!

================================================================