教你如何使用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网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
Jun 09 Python
python实现计算资源图标crc值的方法
Oct 05 Python
python django 实现验证码的功能实例代码
May 18 Python
python负载均衡的简单实现方法
Feb 04 Python
浅析python继承与多重继承
Sep 13 Python
python2.7和NLTK安装详细教程
Sep 19 Python
简单了解python的break、continue、pass
Jul 08 Python
安装python及pycharm的教程图解
Oct 10 Python
Python requests设置代理的方法步骤
Feb 23 Python
Python编程快速上手——Excel表格创建乘法表案例分析
Feb 28 Python
Python偏函数实现原理及应用
Nov 20 Python
python中出现invalid syntax报错的几种原因分析
Feb 12 Python
Python实现智慧校园自动评教全新版
python用海龟绘图写贪吃蛇游戏
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 #Python
Python turtle实现贪吃蛇游戏
python中%格式表达式实例用法
Jun 18 #Python
如何用python清洗文件中的数据
Jun 18 #Python
Python中glob库实现文件名的匹配
You might like
PHP学习之PHP变量
2006/10/09 PHP
php 全局变量范围分析
2009/08/07 PHP
php在文件指定行中写入代码的方法
2012/05/23 PHP
CodeIgniter删除和设置Cookie的方法
2015/04/07 PHP
php中header跳转使用include包含解决参数丢失问题
2015/05/08 PHP
jquery常用技巧及常用方法列表集合
2011/04/06 Javascript
JQuery中使文本框获得焦点的方法实例分析
2015/02/28 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
2016/02/18 Javascript
使用Jasmine和Karma对AngularJS页面程序进行测试
2016/03/05 Javascript
js纯数字逐一停止显示效果的实现代码
2016/03/16 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
iscroll-probe实现下拉刷新和下拉加载效果
2017/06/28 Javascript
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
vue动态设置img的src路径实例
2018/09/18 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
Vue表单控件数据绑定方法详解
2020/02/05 Javascript
加速vue组件渲染之性能优化
2020/04/09 Javascript
JS删除对象中某一属性案例详解
2020/09/08 Javascript
Python如何获取系统iops示例代码
2016/09/06 Python
Python用imghdr模块识别图片格式实例解析
2018/01/11 Python
彻底搞懂Python字符编码
2018/01/23 Python
python 反向输出字符串的方法
2018/07/16 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
树莓派使用USB摄像头和motion实现监控
2019/06/22 Python
pytorch AvgPool2d函数使用详解
2020/01/03 Python
Python可以实现栈的结构吗
2020/05/27 Python
Django Form设置文本框为readonly操作
2020/07/03 Python
Python模拟登录requests.Session应用详解
2020/11/17 Python
Python 爬取淘宝商品信息栏目的实现
2021/02/06 Python
python实现杨辉三角的几种方法代码实例
2021/03/02 Python
瑞典手机壳品牌:Richmond & Finch
2018/04/28 全球购物
英国在线照明超市:Castlegate Lights
2019/10/30 全球购物
基层领导干部“四风”问题批评与自我批评
2014/09/23 职场文书
被告代理词范文
2015/05/25 职场文书
pandas求平均数和中位数的方法实例
2021/08/04 Python