教你如何使用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文件读写并使用mysql批量插入示例分享(python操作mysql)
Feb 17 Python
以一段代码为实例快速入门Python2.7
Mar 31 Python
Python tkinter模块中类继承的三种方式分析
Aug 08 Python
PyQt5每天必学之创建窗口居中效果
Apr 19 Python
python 将md5转为16字节的方法
May 29 Python
Python学习笔记之错误和异常及访问错误消息详解
Aug 08 Python
pygame库实现移动底座弹球小游戏
Apr 14 Python
春节到了 教你使用python来抢票回家
Jan 06 Python
TensorFlow中如何确定张量的形状实例
Jun 23 Python
python实现简单遗传算法
Sep 18 Python
Python日志器使用方法及原理解析
Sep 27 Python
一篇文章教你用python画动态爱心表白
Nov 22 Python
Python实现智慧校园自动评教全新版
python用海龟绘图写贪吃蛇游戏
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 #Python
Python turtle实现贪吃蛇游戏
python中%格式表达式实例用法
Jun 18 #Python
如何用python清洗文件中的数据
Jun 18 #Python
Python中glob库实现文件名的匹配
You might like
php 常用算法和时间复杂度
2013/07/01 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
2014/02/18 PHP
PHP学习笔记(一) 简单了解PHP
2014/08/04 PHP
PHP两种实现无级递归分类的方法
2017/03/02 PHP
php往mysql中批量插入数据实例教程
2018/12/12 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
Laravel自动生成UUID,从建表到使用详解
2019/10/24 PHP
用javascript父窗口控制只弹出一个子窗口
2007/04/10 Javascript
js中判断控件是否存在
2010/08/25 Javascript
JavaScript加入收藏夹功能(兼容IE、firefox、chrome)
2014/05/05 Javascript
浅谈jquery事件处理
2015/04/24 Javascript
实现placeholder效果的方案汇总
2015/06/11 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
JavaScript事件详细讲解
2016/06/27 Javascript
基于jQuery实现表格内容的筛选功能
2016/08/21 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
2016/09/05 Javascript
微信小程序之仿微信漂流瓶实例
2016/12/09 Javascript
nodejs入门教程二:创建一个简单应用示例
2017/04/24 NodeJs
JavaScript定时器setTimeout()和setInterval()详解
2017/08/18 Javascript
详解react服务端渲染(同构)的方法
2017/09/21 Javascript
Angular2中监听数据更新的方法
2018/08/31 Javascript
nodejs实现聊天机器人功能
2019/09/19 NodeJs
python实现问号表达式(?)的方法
2013/11/27 Python
在Docker上部署Python的Flask框架的教程
2015/04/08 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
python实现机器学习之元线性回归
2018/09/06 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
对PyQt5中树结构的实现方法详解
2019/06/17 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
TensorFLow 变量命名空间实例
2020/02/11 Python
如何将Pycharm中调整字体大小的方式设置为"ctrl+鼠标滚轮上下滑"
2020/11/17 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
2021/03/02 Python
李敖北大演讲稿
2014/05/24 职场文书
安全保卫工作竞聘材料
2014/08/25 职场文书
苏州园林导游词
2015/02/03 职场文书