教你如何使用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 相关文章推荐
pymssql ntext字段调用问题解决方法
Dec 17 Python
分析Python中设计模式之Decorator装饰器模式的要点
Mar 02 Python
python 第三方库的安装及pip的使用详解
May 11 Python
pandas每次多Sheet写入文件的方法
Dec 10 Python
Python多进程入门、分布式进程数据共享实例详解
Jun 03 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
Jun 24 Python
Python使用Pandas库实现MySQL数据库的读写
Jul 06 Python
python matplotlib 画dataframe的时间序列图实例
Nov 20 Python
将pytorch转成longtensor的简单方法
Feb 18 Python
如何解决pycharm调试报错的问题
Aug 06 Python
Python爬虫开发与项目实战
Dec 16 Python
Python之matplotlib绘制折线图
Apr 13 Python
Python实现智慧校园自动评教全新版
python用海龟绘图写贪吃蛇游戏
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 #Python
Python turtle实现贪吃蛇游戏
python中%格式表达式实例用法
Jun 18 #Python
如何用python清洗文件中的数据
Jun 18 #Python
Python中glob库实现文件名的匹配
You might like
Terran建筑一览
2020/03/14 星际争霸
使用PHP获取网络文件的实现代码
2010/01/01 PHP
PHP foreach循环使用详解与实例代码
2010/05/08 PHP
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
PHP使用内置dir类实现目录遍历删除
2015/03/31 PHP
PHP封装的Twitter访问类实例
2015/07/18 PHP
PHP基于单例模式实现的mysql类
2016/01/09 PHP
php操作redis命令及代码实例大全
2020/11/19 PHP
javascript让setInteval里的函数参数中的this指向特定的对象
2010/01/31 Javascript
用JSON做数据传输格式中的一些问题总结
2011/12/21 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
JavaScript中的标签语句用法分析
2015/02/10 Javascript
angular实现表单验证及提交功能
2017/02/01 Javascript
canvas 实现中国象棋
2017/02/17 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
JS之if语句对接事件动作逻辑(详解)
2017/06/28 Javascript
图文详解vue框架安装步骤
2019/02/12 Javascript
vue+iview/elementUi实现城市多选
2019/03/28 Javascript
JS使用正则表达式提交页面验证的代码
2019/10/16 Javascript
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
2017/04/18 Python
解决pycharm回车之后不能换行或不能缩进的问题
2019/01/16 Python
利用python如何在前程无忧高效投递简历
2019/05/07 Python
详解Python中的各种转义符\n\r\t
2019/07/10 Python
django-crontab实现服务端的定时任务的示例代码
2020/02/17 Python
PurCotton全棉时代官网:100%天然棉花生产的生活护理用品
2016/11/18 全球购物
Pretty You London官网:英国拖鞋和睡衣品牌
2019/05/08 全球购物
Java里面有没有全局变量?为什么?
2015/02/06 面试题
负责人任命书范本
2014/06/04 职场文书
护士医德考评自我评价
2015/03/03 职场文书
银行培训心得体会范文
2016/01/09 职场文书
goland 恢复已更改文件的操作
2021/04/28 Golang
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL
如何使用PyCharm及常用配置详解
2021/06/03 Python