教你如何使用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实现删除文件但保留指定文件
Jun 21 Python
Python PyQt5实现的简易计算器功能示例
Aug 23 Python
程序员写Python时的5个坏习惯,你有几条?
Nov 26 Python
python3学生名片管理v2.0版
Nov 29 Python
pycharm运行程序时在Python console窗口中运行的方法
Dec 03 Python
Python实现分段线性插值
Dec 17 Python
python re正则匹配网页中图片url地址的方法
Dec 20 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
May 16 Python
python 实现目录复制的三种小结
Dec 04 Python
Python如何安装第三方模块
May 28 Python
浅析Python迭代器的高级用法
Jul 16 Python
python 如何快速复制序列
Sep 07 Python
Python实现智慧校园自动评教全新版
python用海龟绘图写贪吃蛇游戏
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 #Python
Python turtle实现贪吃蛇游戏
python中%格式表达式实例用法
Jun 18 #Python
如何用python清洗文件中的数据
Jun 18 #Python
Python中glob库实现文件名的匹配
You might like
php利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
PHP结合Mysql数据库实现留言板功能
2016/03/04 PHP
深入理解PHP原理之执行周期分析
2016/06/01 PHP
PHP实现通过二维数组键值获取一维键名操作示例
2019/10/11 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
js文件中调用js的实现方法小结
2009/10/23 Javascript
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
JQuery中serialize()、serializeArray()和param()方法示例介绍
2014/07/31 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
2014/09/03 Javascript
Javascript中call与apply的学习笔记
2014/09/22 Javascript
常用的jquery模板插件——jQuery Boilerplate介绍
2014/09/23 Javascript
jQuery+easyui中的combobox实现下拉框特效
2015/02/27 Javascript
JavaScript基础篇(6)之函数表达式闭包
2015/12/11 Javascript
javascript日期验证之输入日期大于等于当前日期
2015/12/13 Javascript
Bootstrap弹出框(modal)垂直居中的问题及解决方案详解
2016/06/12 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
ES6中class类用法实例浅析
2017/04/06 Javascript
JavaScript分步实现一个出生日期的正则表达式
2018/03/22 Javascript
layer.confirm点击第一个按钮关闭弹出框的方法
2019/09/09 Javascript
JS实现横向轮播图(初级版)
2020/06/24 Javascript
jQuery实现鼠标放置名字上显示详细内容气泡提示框效果的方法分析
2020/04/04 jQuery
Pyspider中给爬虫伪造随机请求头的实例
2018/05/07 Python
python实现最长公共子序列
2018/05/22 Python
python+selenium 鼠标事件操作方法
2019/08/24 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
2020/04/19 Python
CSS3实例分享--超炫checkbox复选框和radio单选框
2014/09/01 HTML / CSS
瑰珀翠美国官网:Crabtree & Evelyn美国
2016/11/29 全球购物
美国药妆网站:EDCskincare.com(防晒、痤疮、抗衰老等)
2017/04/28 全球购物
馥蕾诗美国官网:Fresh美国
2019/10/09 全球购物
2014年四风问题自我剖析材料
2014/09/15 职场文书
贫困生助学金感谢信
2015/01/21 职场文书
第二次离婚起诉书
2015/05/18 职场文书
2016年“我们的节日·端午节”活动总结
2016/04/01 职场文书
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL