教你如何使用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爬虫教程之爬取百度贴吧并下载的示例
Mar 07 Python
详细探究Python中的字典容器
Apr 14 Python
简单介绍Python中的JSON使用
Apr 28 Python
Python中使用不同编码读写txt文件详解
May 28 Python
Python fileinput模块使用实例
Jun 03 Python
便捷提取python导入包的属性方法
Oct 15 Python
对python 匹配字符串开头和结尾的方法详解
Oct 27 Python
python 使用装饰器并记录log的示例代码
Jul 12 Python
Django文件存储 自己定制存储系统解析
Aug 02 Python
pytorch动态网络以及权重共享实例
Jan 06 Python
Python中 Global和Nonlocal的用法详解
Jan 20 Python
python 如何用map()函数创建多线程任务
Apr 07 Python
Python实现智慧校园自动评教全新版
python用海龟绘图写贪吃蛇游戏
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 #Python
Python turtle实现贪吃蛇游戏
python中%格式表达式实例用法
Jun 18 #Python
如何用python清洗文件中的数据
Jun 18 #Python
Python中glob库实现文件名的匹配
You might like
PHP 上传文件的方法(类)
2009/07/30 PHP
php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
2013/06/27 PHP
PHP删除数组中空值的方法介绍
2014/04/14 PHP
Laravel学习教程之路由模块
2017/08/18 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
laravel返回统一格式错误码问题
2019/11/04 PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
2020/06/02 PHP
JS 非图片动态loading效果实现代码
2010/04/09 Javascript
javascript中的float运算精度实例分析
2010/08/21 Javascript
使用js检测浏览器的实现代码
2013/05/14 Javascript
用原生JS获取CLASS对象(很简单实用)
2014/10/15 Javascript
javascript原型模式用法实例详解
2015/06/04 Javascript
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
js性能优化技巧
2015/11/29 Javascript
jQuery中的ready函数与window.onload谁先执行
2016/06/21 Javascript
浅谈javascript中的Function和Arguments
2016/08/30 Javascript
Bootstrap如何创建表单
2016/10/21 Javascript
js字符串操作总结(必看篇)
2016/11/22 Javascript
node安装--linux下的快速安装教程
2017/03/21 Javascript
vue cli3 调用百度翻译API翻译页面的实现示例
2019/09/13 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
JavaScript字符串转数字的简单实现方法
2020/11/27 Javascript
[05:53]完美世界携手游戏风云打造 卡尔工作室观战系统篇
2013/04/22 DOTA
python方向键控制上下左右代码
2018/01/20 Python
Python3自动签到 定时任务 判断节假日的实例
2018/11/13 Python
用Python编写一个高效的端口扫描器的方法
2018/12/20 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
2018/12/24 Python
Python 绘制酷炫的三维图步骤详解
2019/07/12 Python
pytorch 数据处理:定义自己的数据集合实例
2019/12/31 Python
python 实现波浪滤镜特效
2020/12/02 Python
美国最好的保健品打折网店:Swanson
2017/08/04 全球购物
国际性能运动服装品牌:Dare 2b
2018/07/27 全球购物
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
军用级手机壳,专为冒险而建:Zizo Wireless
2019/08/07 全球购物
阿联酋航空丹麦官方网站:Emirates DK
2019/08/25 全球购物
如何提高MySql的安全性
2014/06/19 面试题