教你如何使用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基础教程之lambda表达式使用方法
Feb 12 Python
python函数装饰器用法实例详解
Jun 04 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
Jan 29 Python
python3实现爬取淘宝美食代码分享
Sep 23 Python
解决python selenium3启动不了firefox的问题
Oct 13 Python
使用 python pyautogui实现鼠标键盘控制功能
Aug 04 Python
TensorFlow索引与切片的实现方法
Nov 20 Python
opencv python如何实现图像二值化
Feb 03 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
Oct 09 Python
详解Django中 render() 函数的使用方法
Apr 22 Python
Python IO文件管理的具体使用
Mar 20 Python
python中的sys模块和os模块
Mar 20 Python
Python实现智慧校园自动评教全新版
python用海龟绘图写贪吃蛇游戏
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 #Python
Python turtle实现贪吃蛇游戏
python中%格式表达式实例用法
Jun 18 #Python
如何用python清洗文件中的数据
Jun 18 #Python
Python中glob库实现文件名的匹配
You might like
微信公众平台开发之配置与请求
2015/08/26 PHP
十个PHP高级应用技巧果断收藏
2015/09/25 PHP
laravel5使用freetds连接sql server的方法
2018/12/07 PHP
PHP自动生成缩略图函数的源码示例
2019/03/18 PHP
js列举css中所有图标的实现代码
2011/07/04 Javascript
jQuery Trim去除字符串首尾空字符的实现方法说明
2014/02/11 Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
2015/12/16 Javascript
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
2016/06/09 Javascript
jQuery实现发送验证码并60秒倒计时功能
2016/11/25 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
2017/01/04 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
2019/05/02 Javascript
vue实现动态按钮功能
2019/05/13 Javascript
vue在App.vue文件中监听路由变化刷新页面操作
2020/08/14 Javascript
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
[00:57]深扒TI7聊天轮盘语音出处5
2017/05/11 DOTA
pygame 精灵的行走及二段跳的实现方法(必看篇)
2017/07/10 Python
浅谈pandas中shift和diff函数关系
2018/04/08 Python
Pandas 合并多个Dataframe(merge,concat)的方法
2018/06/08 Python
Python+selenium点击网页上指定坐标的实例
2019/07/05 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
python 实现Flask中返回图片流给前端展示
2020/01/09 Python
Windows系统下pycharm中的pip换源
2020/02/23 Python
服务器端jupyter notebook映射到本地浏览器的操作
2020/04/14 Python
Pycharm及python安装详细教程(图解)
2020/07/31 Python
基于Python的一个自动录入表格的小程序
2020/08/05 Python
Django crontab定时任务模块操作方法解析
2020/09/10 Python
简单掌握CSS3中resize属性的用法
2016/04/01 HTML / CSS
CSS3中的transform属性进行2D和3D变换的基本用法
2016/05/12 HTML / CSS
孕妇装中的著名品牌:Isabella Oliver(伊莎贝拉·奥利弗)
2016/10/31 全球购物
Smashbox官网:美国知名彩妆品牌
2017/01/05 全球购物
英国奢侈品概念店:Base Blu
2019/05/16 全球购物
坚定理想信念心得体会
2014/03/11 职场文书
化妆品活动策划方案
2014/05/23 职场文书
关于战胜挫折的名言警句大全!
2019/07/05 职场文书
六年级情感作文之500字
2019/10/23 职场文书