教你如何使用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 相关文章推荐
写了个监控nginx进程的Python脚本
May 10 Python
Python中的Classes和Metaclasses详解
Apr 02 Python
Python将多份excel表格整理成一份表格
Jan 03 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
Apr 19 Python
python版本五子棋的实现代码
Dec 11 Python
Django JWT Token RestfulAPI用户认证详解
Jan 23 Python
Python+PyQt5实现美剧爬虫可视工具的方法
Apr 25 Python
Python程序包的构建和发布过程示例详解
Jun 09 Python
pandas 选取行和列数据的方法详解
Aug 08 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
Sep 26 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
Apr 02 Python
python rolling regression. 使用 Python 实现滚动回归操作
Jun 08 Python
Python实现智慧校园自动评教全新版
python用海龟绘图写贪吃蛇游戏
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 #Python
Python turtle实现贪吃蛇游戏
python中%格式表达式实例用法
Jun 18 #Python
如何用python清洗文件中的数据
Jun 18 #Python
Python中glob库实现文件名的匹配
You might like
apache mysql php 源码编译使用方法
2012/05/03 PHP
分享下php5类中三种数据类型的区别
2015/01/26 PHP
php函数实现判断是否移动端访问
2015/03/03 PHP
php中照片旋转 (orientation) 问题的正确处理
2017/02/16 PHP
在视频前插入广告
2006/11/20 Javascript
JavaScript日历实现代码
2010/09/12 Javascript
Javascript call和apply区别及使用方法
2013/11/14 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
2014/04/25 Javascript
JavaScript获取DOM元素的11种方法总结
2015/04/25 Javascript
jQuery选择器用法实例详解
2015/12/17 Javascript
JavaScript仿百度图片浏览效果
2016/11/23 Javascript
ionic中列表项增加和删除的实现方法
2017/01/22 Javascript
TableSort.js表格排序插件使用方法详解
2017/02/10 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
2017/04/18 Javascript
Node 升级到最新稳定版的方法分享
2018/05/17 Javascript
JavaScript字符串处理常见操作方法小结
2019/11/15 Javascript
vue与iframe之间的信息交互的实现
2020/04/08 Javascript
原生JS实现音乐播放器的示例代码
2021/02/25 Javascript
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
Python如何使用OS模块调用cmd
2020/02/27 Python
python pip如何手动安装二进制包
2020/09/30 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
HTML5: Web 标准最巨大的飞跃
2008/10/17 HTML / CSS
Bowflex美国官方网站:高级家庭健身器材
2017/12/22 全球购物
阿玛尼意大利官网:Armani意大利
2018/10/30 全球购物
毕业生自我鉴定范文
2013/11/08 职场文书
夜班门卫岗位职责
2013/12/09 职场文书
思想政治教育专业个人求职信范文
2013/12/20 职场文书
十月份红领巾广播稿
2014/01/22 职场文书
房屋出租委托书格式
2014/09/23 职场文书
自我检讨书怎么写
2015/05/07 职场文书
员工安全责任协议书
2016/03/22 职场文书
2019垃圾分类宣传口号汇总
2019/08/16 职场文书
SpringBoot2零基础到精通之异常处理与web原生组件注入
2022/03/22 Java/Android