教你如何使用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的pyxmpp2中的主循环使其提高性能
Apr 24 Python
解决python matplotlib imshow无法显示的问题
May 24 Python
python3 对list中每个元素进行处理的方法
Jun 29 Python
python抖音表白程序源代码
Apr 07 Python
在django模板中实现超链接配置
Aug 21 Python
Python基于进程池实现多进程过程解析
Apr 30 Python
Python如何使用PIL Image制作GIF图片
May 16 Python
Tensorflow tf.tile()的用法实例分析
May 22 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
Oct 02 Python
python和C++共享内存传输图像的示例
Oct 27 Python
浅谈Selenium 控制浏览器的常用方法
Dec 04 Python
python进行二次方程式计算的实例讲解
Dec 06 Python
Python实现智慧校园自动评教全新版
python用海龟绘图写贪吃蛇游戏
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 #Python
Python turtle实现贪吃蛇游戏
python中%格式表达式实例用法
Jun 18 #Python
如何用python清洗文件中的数据
Jun 18 #Python
Python中glob库实现文件名的匹配
You might like
php使用ICQ网关发送手机短信
2013/10/30 PHP
ThinkPHP CURD方法之limit方法详解
2014/06/18 PHP
快速保存网页中所有图片的方法
2006/06/23 Javascript
(仅IE下有效)关于checkbox 三态
2007/05/12 Javascript
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
javascript中的一些注意事项 更新中
2010/12/06 Javascript
js获取URL的参数的方法(getQueryString)示例
2013/09/29 Javascript
ExtJS自定义主题(theme)样式详解
2013/11/18 Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
2014/06/07 Javascript
JavaScript声明变量时为什么要加var关键字
2014/09/29 Javascript
JS实现自适应高度表单文本框的方法
2015/02/25 Javascript
基于javascript制作微信聊天面板
2020/08/09 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
通过js修改input、select默认字体颜色
2017/04/19 Javascript
详解vue中使用express+fetch获取本地json文件
2017/10/10 Javascript
layui实现动态和静态分页
2018/04/28 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
2020/09/29 Javascript
关于JavaScript中异步/等待的用法与理解
2020/11/18 Javascript
python在linux中输出带颜色的文字的方法
2014/06/19 Python
Python编程中归并排序算法的实现步骤详解
2016/05/04 Python
python+matplotlib演示电偶极子实例代码
2018/01/12 Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
2018/01/24 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息
2018/04/17 Python
python版opencv摄像头人脸实时检测方法
2018/08/03 Python
Opencv+Python 色彩通道拆分及合并的示例
2018/12/08 Python
Django的models中on_delete参数详解
2019/07/16 Python
手写一个python迭代器过程详解
2019/08/27 Python
python 实现仿微信聊天时间格式化显示的代码
2020/04/17 Python
美国新蛋IT数码商城:Newegg.com
2016/07/21 全球购物
如何从一个文件档案的尾端新增记录
2016/12/02 面试题
爱心活动计划书
2014/04/26 职场文书
尊师重教演讲稿
2014/09/04 职场文书
党风廉政教育心得体会2016
2016/01/22 职场文书
试了下Golang实现try catch的方法
2021/07/01 Golang
Vue3实现简易音乐播放器组件
2022/08/14 Vue.js