教你如何使用Python实现二叉树结构及三种遍历


Posted in Python onJune 18, 2021

一:代码实现

class TreeNode:
    """节点类"""
    def __init__(self, mid, left=None, right=None):
        self.mid = mid
        self.left = left
        self.right = right


# 树类
class Tree:
    """树类"""
    def __init__(self, root=None):
        self.root = root

    def add(self, item):
        # 将要添加的数据封装成一个node结点
        node = TreeNode(item)
        if not self.root:
            self.root = node
            return
        queue = [self.root]
        while queue:
            cur = queue.pop(0)
            if not cur.left:
                cur.left = node
                return
            else:
                queue.append(cur.left)

            if not cur.right:
                cur.right = node
                return
            else:
                queue.append(cur.right)
               
tree = Tree()
tree.add(0)
tree.add(1)
tree.add(2)
tree.add(3)
tree.add(4)
tree.add(5)
tree.add(6)

二:遍历

在上述树类代码基础上加遍历函数,基于递归实现。

教你如何使用Python实现二叉树结构及三种遍历

先序遍历:

先序遍历结果是:0 -> 1 -> 3 -> 4 -> 2 -> 5 -> 6

# 先序遍历
    def preorder(self, root, result=[]):
        if not root:
            return
        result.append(root.mid)
        self.preorder(root.left, result)
        self.preorder(root.right, result)
        return result
        
print("先序遍历")
print(tree.preorder(tree.root))
"""
先序遍历
[0, 1, 3, 4, 2, 5, 6]
"""

中序遍历:

中序遍历结果是:3 -> 1 -> 4 -> 0 -> 5 -> 2 -> 6

# 中序遍历
    def inorder(self, root, result=[]):
        if not root:
            return result
        self.inorder(root.left, result)
        result.append(root.mid)
        self.inorder(root.right, result)
        return result
        
print("中序遍历")
print(tree.inorder(tree.root))
"""
中序遍历
3, 1, 4, 0, 5, 2, 6]
"""

后续遍历

后序遍历结果是:3 -> 4 -> 1 -> 5 -> 6 -> 2 -> 0

# 后序遍历
    def postorder(self, root, result=[]):
        if not root:
            return result
        self.postorder(root.left, result)
        self.postorder(root.right, result)
        result.append(root.mid)

        return result
        
print("后序遍历")
print(tree.postorder(tree.root))
"""
后序遍历
[3, 4, 1, 5, 6, 2, 0]
"""

到此这篇关于教你如何使用Python实现二叉树结构及三种遍历的文章就介绍到这了,更多相关Python实现二叉树结构及三种遍历内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
跟老齐学Python之关于循环的小伎俩
Oct 02 Python
python中__slots__用法实例
Jun 04 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
Nov 07 Python
Python实现的拉格朗日插值法示例
Jan 08 Python
Python实现去除列表中重复元素的方法总结【7种方法】
Feb 16 Python
详解Python的三种可变参数
May 08 Python
详解Python3 pickle模块用法
Sep 16 Python
pandas按行按列遍历Dataframe的几种方式
Oct 23 Python
基于Python获取照片的GPS位置信息
Jan 20 Python
Matplotlib自定义坐标轴刻度的实现示例
Jun 18 Python
Python多线程的退出控制实现
Aug 10 Python
如何利用python创作字符画
Jun 25 Python
Python实现智慧校园自动评教全新版
python用海龟绘图写贪吃蛇游戏
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 #Python
Python turtle实现贪吃蛇游戏
python中%格式表达式实例用法
Jun 18 #Python
如何用python清洗文件中的数据
Jun 18 #Python
Python中glob库实现文件名的匹配
You might like
短波的认识
2021/03/01 无线电
PHP入门速成(2)
2006/10/09 PHP
php将会员数据导入到ucenter的代码
2010/07/18 PHP
IIS6.0中配置php服务全过程解析
2013/08/07 PHP
CodeIgniter中使用Smarty3基本配置
2015/06/29 PHP
雄兵连第三季海报曝光,艾妮熙德成主角,蔷薇新造型
2021/03/09 国漫
jquery利用ajax调用后台方法实例
2013/08/23 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
JS实现仿京东淘宝竖排二级导航
2014/12/08 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
jQuery搜索同辈元素方法
2015/02/10 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
2015/04/15 Javascript
JavaScript判断IE版本型号
2015/07/27 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
js HTML5 Canvas绘制转盘抽奖
2020/09/13 Javascript
PHP自动加载autoload和命名空间的应用小结
2017/12/01 Javascript
JS实现DOM删除节点操作示例
2018/04/04 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
JS实现根据详细地址获取经纬度功能示例
2019/04/16 Javascript
使用Node.js在深度学习中做图片预处理的方法
2019/09/18 Javascript
Vue基于iview table展示图片实现点击放大
2020/08/05 Javascript
python解决网站的反爬虫策略总结
2016/10/26 Python
python实现求解列表中元素的排列和组合问题
2018/03/15 Python
Python numpy实现二维数组和一维数组拼接的方法
2018/06/05 Python
python实现泊松图像融合
2018/07/26 Python
Python基于plotly模块实现的画图操作示例
2019/01/23 Python
如何使用Python脚本实现文件拷贝
2019/11/20 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
Python dict和defaultdict使用实例解析
2020/03/12 Python
2014年自愿离婚协议书范本
2014/09/25 职场文书
群众路线自我剖析材料
2014/10/08 职场文书
横空出世观后感
2015/06/09 职场文书
2016年第二十届“母亲节暨幸福工程救助贫困母亲活动日”活动总结
2016/04/06 职场文书
安装配置mysql及Navicat prenium的详细流程
2021/06/10 MySQL
Vue elementUI表单嵌套表格并对每行进行校验详解
2022/02/18 Vue.js
MySql分区类型及创建分区的方法
2022/04/13 MySQL