教你如何使用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读写配置文件的方法
Jun 03 Python
Python之web模板应用
Dec 26 Python
Python实现批量压缩图片
Jan 25 Python
Python实现找出数组中第2大数字的方法示例
Mar 26 Python
django 微信网页授权认证api的步骤详解
Jul 30 Python
Django实现发送邮件找回密码功能
Aug 12 Python
Python matplotlib生成图片背景透明的示例代码
Aug 30 Python
Numpy与Pytorch 矩阵操作方式
Dec 27 Python
python + selenium 刷B站播放量的实例代码
Jun 12 Python
python实现AHP算法的方法实例(层次分析法)
Sep 09 Python
Python join()函数原理及使用方法
Nov 14 Python
Python 流媒体播放器的实现(基于VLC)
Apr 28 Python
Python实现智慧校园自动评教全新版
python用海龟绘图写贪吃蛇游戏
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 #Python
Python turtle实现贪吃蛇游戏
python中%格式表达式实例用法
Jun 18 #Python
如何用python清洗文件中的数据
Jun 18 #Python
Python中glob库实现文件名的匹配
You might like
PHP反转字符串函数strrev()函数的用法
2012/02/04 PHP
php在window iis的莫名问题的测试方法
2013/05/14 PHP
php中过滤非法字符的具体实现
2013/10/29 PHP
windows下安装php的memcache模块的方法
2015/04/07 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
2017/08/07 PHP
javascript 内存回收机制理解
2011/01/17 Javascript
flash调用js中的方法,让js传递变量给flash的办法及思路
2013/08/07 Javascript
Javascript浅谈之this
2013/12/17 Javascript
jQuery修改CSS伪元素属性的方法
2014/07/30 Javascript
javascript创建对象、对象继承的实用方式详解
2016/03/08 Javascript
webpack 3.X学习之多页面打包的方法
2018/09/04 Javascript
JavaScript交换变量的常用方法小结【4种方法】
2020/05/07 Javascript
JavaScript实现HSL拾色器
2020/05/21 Javascript
js实现简单的随机点名器
2020/09/17 Javascript
[01:19:11]Ti4 循环赛第二日 NaVi.us vs iG
2014/07/11 DOTA
[47:03]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第二场 12.10
2020/12/13 DOTA
python实现socket客户端和服务端简单示例
2014/02/24 Python
Python中用Descriptor实现类级属性(Property)详解
2014/09/18 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
2018/10/21 Python
Python实现将蓝底照片转化为白底照片功能完整实例
2019/12/13 Python
python实现将range()函数生成的数字存储在一个列表中
2020/04/02 Python
使用Keras预训练好的模型进行目标类别预测详解
2020/06/27 Python
Python高并发和多线程有什么关系
2020/11/14 Python
浅析python实现动态规划背包问题
2020/12/31 Python
2021年值得向Python开发者推荐的VS Code扩展插件
2021/01/25 Python
深入浅出CSS3 background-clip,background-origin和border-image教程
2011/01/27 HTML / CSS
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
美国隐形眼镜零售商:LensPure
2019/03/10 全球购物
奥地利体育网上商店:Gigasport
2019/10/09 全球购物
儿媳婚宴答谢词
2014/01/14 职场文书
岗位廉洁从业承诺书
2014/03/28 职场文书
全国优秀教师事迹材料
2014/08/26 职场文书
业务员工作态度散漫检讨书
2014/11/02 职场文书
2014年计划生育工作总结
2014/11/14 职场文书
工程安全生产协议书
2014/11/21 职场文书
2015年银行柜员工作总结报告
2015/04/01 职场文书