教你如何使用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 crontab设置linux定时任务
Dec 08 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
Dec 19 Python
python基于ID3思想的决策树
Jan 03 Python
python实现简易版计算器
Jun 22 Python
Python pandas常用函数详解
Feb 07 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
Feb 08 Python
Python实现求两个数组交集的方法示例
Feb 23 Python
在Django下创建项目以及设置settings.py教程
Dec 03 Python
new_zeros() pytorch版本的转换方式
Feb 18 Python
python字符串判断密码强弱
Mar 18 Python
python中count函数知识点浅析
Dec 17 Python
Pygame如何使用精灵和碰撞检测
Nov 17 Python
Python实现智慧校园自动评教全新版
python用海龟绘图写贪吃蛇游戏
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 #Python
Python turtle实现贪吃蛇游戏
python中%格式表达式实例用法
Jun 18 #Python
如何用python清洗文件中的数据
Jun 18 #Python
Python中glob库实现文件名的匹配
You might like
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
2015/11/30 PHP
Laravel相关的一些故障解决
2020/08/19 PHP
用javascript控制iframe滚动的代码
2007/04/10 Javascript
自己的js工具 Event封装
2009/08/21 Javascript
javascript从image转换为base64位编码的String
2014/07/29 Javascript
浅析Node.js查找字符串功能
2014/09/03 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
2015/01/24 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
JavaScript的jQuery库中ready方法的学习教程
2015/08/14 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
2015/12/15 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
2016/06/12 Javascript
js判断手机号是否正确并返回的实现代码
2017/01/17 Javascript
JS中静态页面实现微信分享功能
2017/02/06 Javascript
详解nodejs express下使用redis管理session
2017/04/24 NodeJs
jQuery自动或手动图片切换效果
2017/10/11 jQuery
浅谈angular表单提交中ng-submit的默认使用方法
2018/09/30 Javascript
M2实现Nodejs项目自动部署的方法步骤
2019/05/05 NodeJs
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
2020/04/17 Javascript
分析python服务器拒绝服务攻击代码
2014/01/16 Python
深入理解Python 关于supper 的 用法和原理
2018/02/28 Python
python区分不同数据类型的方法
2019/10/14 Python
利用Python代码实现一键抠背景功能
2019/12/29 Python
Manjaro、pip、conda更换国内源的方法
2020/11/17 Python
python UIAutomator2使用超详细教程
2021/02/19 Python
Meli Melo官网:名媛们钟爱的英国奢侈手包品牌
2017/04/17 全球购物
英超联赛的首选足球:Mitre足球
2019/05/06 全球购物
俄罗斯名牌服装网上商店:UNIQUE FABRIC
2019/07/25 全球购物
什么是三层交换,说说和路由的区别在那里
2014/09/01 面试题
数控专业个人求职信范例
2013/11/29 职场文书
《和我们一样享受春天》教学反思
2014/02/07 职场文书
空乘英文求职信
2014/04/13 职场文书
经典禁毒标语
2014/06/16 职场文书
Eclipse+Java+Swing+Mysql实现电影购票系统(详细代码)
2022/01/18 Java/Android
如何通过一篇文章了解Python中的生成器
2022/04/02 Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
2022/04/14 Python