数据结构-5(二叉树)

一、思维导图(相关概念)

二、遍历

python 复制代码
    def prior_show(self, node):
        """
        先序遍历、根左右
        """
        if node is not None:
            print(node.data, end=" ")
            self.prior_show(node.lchild)
            self.prior_show(node.rchild)

    def mid_show(self, node):
        """
        中序遍历、左根右

        """
        if node is not None:
            self.mid_show(node.lchild)
            print(node.data, end=" ")
            self.mid_show(node.rchild)

    def post_show(self, node):
        """
        后序遍历、左 右 根

        """
        if node is not None:
            self.post_show(node.lchild)
            self.post_show(node.rchild)
            print(node.data, end=" ")

三、二叉树的初始化以及树的创建

python 复制代码
class Node():
    def __init__(self, data, lchild=None, rchild=None):
        self.data = data
        self.lchild = lchild
        self.rchild = rchild


class Tree():
    def __init__(self, root=None):
        self.root = root  # 根节点
        self.index = 0  # 用于遍历一串数据的索引

    def tree_creat(self, data_str):
        if self.index >= len(data_str):  # 最大条件,数据读取完之后直接返回
            return None

        # 开始创建,开始之前先读取对应的数据并且后移index
        data = data_str[self.index]
        self.index += 1
        # 开始递归,先写一个可以终止递归的目标条件
        if data == "#":  # 终止递归的条件:直到没有左or右子树
            return None
        node = Node(data)
        node.lchild = self.tree_creat(data_str)  # 当满足终止递归的条件时触发return None才能进一步往下走走到return node开始逐步往回收递归函数,并向父函数返回node
        node.rchild = self.tree_creat(data_str)

        return node

四、完整代码

python 复制代码
class Node():
    def __init__(self, data, lchild=None, rchild=None):
        self.data = data
        self.lchild = lchild
        self.rchild = rchild


class Tree():
    def __init__(self, root=None):
        self.root = root  # 根节点
        self.index = 0  # 用于遍历一串数据的索引

    def tree_creat(self, data_str):
        if self.index >= len(data_str):  # 最大条件,数据读取完之后直接返回
            return None

        # 开始创建,开始之前先读取对应的数据并且后移index
        data = data_str[self.index]
        self.index += 1
        # 开始递归,先写一个可以终止递归的目标条件
        if data == "#":  # 终止递归的条件:直到没有左or右子树
            return None
        node = Node(data)
        node.lchild = self.tree_creat(data_str)  # 当满足终止递归的条件时触发return None才能进一步往下走走到return node开始逐步往回收递归函数,并向父函数返回node
        node.rchild = self.tree_creat(data_str)

        return node


    def prior_show(self, node):
        """
        先序遍历、根左右
        """
        if node is not None:
            print(node.data, end=" ")
            self.prior_show(node.lchild)
            self.prior_show(node.rchild)

    def mid_show(self, node):
        """
        中序遍历、左根右

        """
        if node is not None:
            self.mid_show(node.lchild)
            print(node.data, end=" ")
            self.mid_show(node.rchild)

    def post_show(self, node):
        """
        后序遍历、左 右 根

        """
        if node is not None:
            self.post_show(node.lchild)
            self.post_show(node.rchild)
            print(node.data, end=" ")




if __name__ == '__main__':
    # data_str = input("输入二叉树:")
    data_str = "ABD##E##CFH###G##"
    # 创建二叉树
    tree = Tree()
    tree.root = tree.tree_creat(data_str)

    # 遍历
    print("先序遍历结果")
    tree.prior_show(tree.root)
    print()
    print("中序遍历结果")
    tree.mid_show(tree.root)
    print()
    print("后序遍历结果")
    tree.post_show(tree.root)
    print()

# ABD##E##CFH###G##
相关推荐
Eiceblue7 小时前
将 Python 列表导出为 Excel 文件:一维、二维、字典列表
开发语言·python·excel·visual studio code
Swizard14 小时前
别再让你的 Python 傻等了:三分钟带你通过 asyncio 实现性能起飞
python
代码or搬砖15 小时前
String字符串
android·java·开发语言
leo__52015 小时前
基于两步成像算法的聚束模式SAR MATLAB实现
开发语言·算法·matlab
前端小白在前进16 小时前
力扣刷题:在排序数组中查找元素的第一个和最后一个位置
数据结构·算法·leetcode
Darkershadow16 小时前
python学习之串口通信
python·学习
Macbethad16 小时前
自动化测试技术报告
开发语言·lua
38242782716 小时前
python:输出JSON
前端·python·json
不会画画的画师16 小时前
Go开发指南:io/ioutil包应用和迁移指南
开发语言·后端·golang
2503_9284115616 小时前
12.22 wxml语法
开发语言·前端·javascript