教你如何使用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 相关文章推荐
开源软件包和环境管理系统Anaconda的安装使用
Sep 04 Python
python中实现数组和列表读取一列的方法
Apr 03 Python
python实现n个数中选出m个数的方法
Nov 13 Python
python根据url地址下载小文件的实例
Dec 18 Python
django的ORM操作 删除和编辑实现详解
Jul 24 Python
python urllib爬虫模块使用解析
Sep 05 Python
使用 Python 写一个简易的抽奖程序
Dec 08 Python
Python属性和内建属性实例解析
Jan 14 Python
Python 识别12306图片验证码物品的实现示例
Jan 20 Python
在pytorch中实现只让指定变量向后传播梯度
Feb 29 Python
Django values()和value_list()的使用
Mar 31 Python
Python Flask框架实现简单加法工具过程解析
Jun 03 Python
Python实现智慧校园自动评教全新版
python用海龟绘图写贪吃蛇游戏
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 #Python
Python turtle实现贪吃蛇游戏
python中%格式表达式实例用法
Jun 18 #Python
如何用python清洗文件中的数据
Jun 18 #Python
Python中glob库实现文件名的匹配
You might like
php5.3 废弃函数小结
2010/05/16 PHP
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
2011/11/07 PHP
实用的简单PHP分页集合包括使用方法
2013/10/21 PHP
Windows7下的php环境配置教程
2015/02/28 PHP
PHP如何将log信息写入服务器中的log文件
2015/07/29 PHP
yii数据库的查询方法
2015/12/28 PHP
PHP正则表达式笔记与实例详解
2019/05/09 PHP
IE和Firefox的Javascript兼容性总结[推荐收藏]
2011/10/19 Javascript
Javascript获取HTML静态页面参数传递值示例
2013/08/18 Javascript
js通过八个点 拖动改变div大小的实现方法
2014/03/05 Javascript
jQuery中关于ScrollableGridPlugin.js(固定表头)插件的使用逐步解析
2014/07/17 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
2015/09/12 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
2016/01/26 Javascript
JS中的数组方法笔记整理
2016/07/26 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
移动端触屏幻灯片图片切换插件idangerous swiper.js
2017/04/10 Javascript
Vue中计算属性computed的示例解读
2017/07/26 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
删除table表格行的实例讲解
2017/09/21 Javascript
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
深入理解react 组件类型及使用场景
2019/03/07 Javascript
vue-cli项目使用mock数据的方法(借助express)
2019/04/15 Javascript
js设计模式之单例模式原理与用法详解
2019/08/15 Javascript
关于vue2强制刷新,解决页面不会重新渲染的问题
2019/10/29 Javascript
Django实现组合搜索的方法示例
2018/01/23 Python
python3人脸识别的两种方法
2019/04/25 Python
pyqt5 删除layout中的所有widget方法
2019/06/25 Python
浅谈CSS3 动画卡顿解决方案
2019/01/02 HTML / CSS
美国最大婚纱连锁店运营商:David’s Bridal
2019/03/12 全球购物
J2EE系统只能是基于web
2015/09/08 面试题
求职简历的自我评价怎样写好
2013/10/07 职场文书
面试求职的个人自我评价
2013/11/16 职场文书
公司门卫岗位职责范本
2014/07/08 职场文书
pandas中DataFrame重置索引的几种方法
2021/05/24 Python
create-react-app开发常用配置教程
2022/06/25 Javascript
MySQL分布式恢复进阶
2022/07/23 MySQL