教你如何使用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生成随机mac地址的方法
Mar 16 Python
bpython 功能强大的Python shell
Feb 16 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
Jul 11 Python
R vs. Python 数据分析中谁与争锋?
Oct 18 Python
创建pycharm的自定义python模板方法
May 23 Python
Window 64位下python3.6.2环境搭建图文教程
Sep 19 Python
python批量修改文件夹及其子文件夹下的文件内容
Mar 15 Python
numpy按列连接两个维数不同的数组方式
Dec 06 Python
python3 webp转gif格式的实现示例
Dec 10 Python
python的help函数如何使用
Jun 11 Python
使用python-cv2实现视频的分解与合成的示例代码
Oct 26 Python
python中print格式化输出的问题
Apr 16 Python
Python实现智慧校园自动评教全新版
python用海龟绘图写贪吃蛇游戏
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 #Python
Python turtle实现贪吃蛇游戏
python中%格式表达式实例用法
Jun 18 #Python
如何用python清洗文件中的数据
Jun 18 #Python
Python中glob库实现文件名的匹配
You might like
php旋转图片90度的方法
2013/11/07 PHP
PHP 正则表达式小结
2015/02/12 PHP
js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)
2015/07/18 Javascript
javascript实现在下拉列表中显示多级树形菜单的方法
2015/08/12 Javascript
JavaScript基本数据类型及值类型和引用类型
2015/08/25 Javascript
详解JavaScript中的4种类型识别方法
2015/09/14 Javascript
jQuery获取当前点击的对象元素(实现代码)
2016/05/19 Javascript
JavaScript中Array的实用操作技巧分享
2016/09/11 Javascript
详解JavaScript的闭包、IIFE、apply、函数与对象
2016/12/21 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
详解Vue2.0 事件派发与接收
2017/09/05 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
2019/04/17 Javascript
微信小程序云开发之云函数详解
2019/05/16 Javascript
JavaScript的查询机制LHS和RHS解析
2019/08/16 Javascript
Vue学习之组件用法实例详解
2020/01/06 Javascript
如何解决jQuery 和其他JS库的冲突
2020/06/22 jQuery
Python爬虫框架Scrapy常用命令总结
2018/07/26 Python
pandas DataFrame创建方法的方式
2019/08/02 Python
python进阶之自定义可迭代的类
2019/08/20 Python
Python实现在Windows平台修改文件属性
2020/03/05 Python
pytorch __init__、forward与__call__的用法小结
2021/02/27 Python
法国珠宝店:CLEOR
2017/01/29 全球购物
英国时尚配饰、珠宝和服装网站:KJ Beckett
2020/01/23 全球购物
企业管理培训感言
2014/01/27 职场文书
护理学应聘自荐书范文
2014/02/05 职场文书
《孔子游春》教学反思
2014/02/25 职场文书
购房公证委托书(2014版)
2014/09/12 职场文书
单位收入证明范本
2015/06/18 职场文书
2015年全民创业工作总结
2015/07/23 职场文书
结婚喜宴迎宾词
2015/08/10 职场文书
管理者们如何制定2019年的工作计划?
2019/07/01 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书
读完《骆驼祥子》的观后感!
2019/07/05 职场文书
你对自己的信用报告有过了解吗?
2019/07/09 职场文书
python 下载文件的几种方式分享
2021/04/07 Python
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
2021/08/23 MySQL