Python实现的二叉树的先序、中序、后序遍历示例

一、先序、中序、后序遍历的次序:

创建好一棵二叉树后,可以按照一定的顺序对树中所有的元素进行遍历。按照先左后右,树
的遍历方法有三种:先序遍历、中序遍历和后序遍历。
其中,先序遍历的次序是:如果二叉树不为空,则访问根节点,然后访问左子树,最后访问右
子树;否则,程序退出。
中序遍历的次序是:如果二叉树不为空,则先访问左子树,然后访问根节点,最后访问右子树;
否则,程序退出。
后序遍历的次序是:如果二叉树不为空,则先访问左子树,然后访问右子树,最后访问根节点。

二、示例所用的二叉树图:

三、示例代码:

class BinaryTree:                           # 创建一个二叉树节点的类,节点中定义三个属性,def __init__(self, elem):                # 分别为 elem 本身的值,还有 lchild 左孩子和rchild 右孩子self.elem = elemself.lchild = Noneself.rchild = Nonedef insert_left(self, elem):            # 向左子树插入节点self.lchild = BinaryTree(elem)return self.lchilddef insert_right(self, elem):           # 向右子树插入节点self.rchild = BinaryTree(elem)return self.rchilddef show(self):                         # 输出节点数据print(self.elem)def preorder(node):                         # 先序遍历函数if node.elem:node.show()if node.lchild:preorder(node.lchild)if node.rchild:preorder(node.rchild)def inorder(node):                          # 中序遍历函数if node.elem:if node.lchild:inorder(node.lchild)node.show()if node.rchild:inorder(node.rchild)def postorder(node):                        # 后序遍历函数if node.elem:if node.lchild:postorder(node.lchild)if node.rchild:postorder(node.rchild)node.show()if __name__ == '__main__':Root = BinaryTree('Root')a = Root.insert_left('A')c = a.insert_left('C')d = a.insert_right('D')f = d.insert_left('F')g = d.insert_right('G')b = Root.insert_right('B')e = b.insert_right('E')print('binary tree Pre-traversal:')preorder(Root)print('binary tree In-traversal:')inorder(Root)print('binary tree Post-traversal:')postorder(Root)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/206018.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用23种设计模式打造一个cocos creator的游戏框架----(一)生成器模式

1、模式标准 模式名称:生成器模式 模式分类:创建型 模式意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 结构图: 适用于: 当创建复杂对象的算法应该独立于该对象的…

[MySQL--基础]事务的基础知识

前言 ⭐Hello!这里是欧_aita的博客。 ⭐今日语录:生活中最重要的决定就是要做出决定。 ⭐个人主页:欧_aita ψ(._. )>⭐个人专栏: 数据结构与算法 MySQL数据库 事务的目录📕 前言事务简介🚀事务操作🚀准…

Linux:缓冲区的概念理解

文章目录 缓冲区什么是缓冲区?缓冲区的意义是什么?缓冲区的刷新方式 理解缓冲区用户缓冲区和内核缓冲区缓冲区在哪里? 本篇主要总结的是关于缓冲区的概念理解,以及再次基础上对文件的常用接口进行一定程度的封装 缓冲区 什么是缓…

keil添加了头文件仍然报找不到头文件的原因

如图,我在user分组新建Item,可是keil提示头文件不存在,所有的一切设置都是对的,但就是找不到头文件,找了很久,最后才发现是user分组和文件系统中的文件夹不一致的原因。 如图,在分组的文件系统的…

【动态规划】03使用最小花费爬楼梯(easy1)

题目链接:leetcode使用最小花费爬楼梯 目录 题目解析: 算法原理 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码 题目解析: 题目让我们求达到楼梯顶部的最低花费. 由题可得: cost[i] 是从楼梯第 i 个…

【附源码】完整版,Python+Selenium+Pytest+POM自动化测试框架封装

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、测试框架简介 …

【VRTK】【VR开发】【Unity】11-甩臂移动

课程配套学习资源下载 https://download.csdn.net/download/weixin_41697242/88485426?spm=1001.2014.3001.5503 【概述】 除了一般的移动能力,VRTK还提供更为沉浸的甩臂移动。 【设定摇杆输入中间件】 在Hierarchy中展开Button Input Actions,其下生成两个新的空子对象…

主动而非被动:确保网络安全运营弹性的途径

金融部门处理威胁的经验对网络安全领域的任何人都有启发——没有什么可以替代提前摆脱潜在的风险和问题。 从狂野西部的银行劫匪到勒索软件即服务 (RaaS),全球金融生态系统面临的威胁多年来发生了巨大变化。技术进步带动了金融业的快速发展,从现金交易到…

基于轻量级MnasNet模型开发构建40种常见中草药图像识别系统

文本是前文的后续: 《python基于轻量级GhostNet模型开发构建23种常见中草药图像识别系统》 前文主要是在小批量小种类数据集上尝试开发构建基于轻量级CNN模型的中草药图像识别系统,本文的初衷是想要构建一个大类别大数据集的基础,但是无奈发…

【天线了解】2.WTW天线了解与使用

注意网段:(计算机与设备同一网段才可以通信) 1.LS28接收机使用的网段是192.168.16.X,所以电脑应该同样设置 2.WTW天线使用网段192.168.98.X 0.WTW使用原理 1.计算机控制LS28(接收机),WTW天线。 …

全志H6-ARMLinux第1天:全志概述、刷机登陆、官方外设库、蜂鸣器、超声波测距

1. 全志H616课程概述(456.01) 1.1 为什么学 学习目标依然是Linux系统,平台是ARM架构 蜂巢快递柜,配送机器人,这些应用场景用 C51、STM32 单片机无法实现第三方介入库的局限性,比如刷脸支付和公交车收费设…

python的extend函数详解

文章目录 语法功能示例例1:添加列表例2:添加元组例3:添加集合例4:添加字典(只添加键)例5:添加字符串例6:混合类型扩展例7:扩展空列表或不可迭代对象 注意事项&#xff1a…

PHP使用mkcert本地开发生成HTTPS证书 PhpEnv集成环境

PHP使用mkcert本地开发生成HTTPS证书 PhpEnv集成环境 前言一、介绍 mkcert二、安装/使用 mkcert1. 安装2. 使用 总结 前言 本地开发时有些功能只有在 https 证书的情况下才能使用, 例如一些 Web API 一、介绍 mkcert Github地址 mkcert 是一个制作本地可信开发证书的简单工具。…

SmartChart:一站式数据可视化解决方案

在当今的数据驱动的世界中,数据可视化已经成为了一个重要的工具,它可以帮助我们理解复杂的数据集,并从中提取有价值的信息。SmartChart就是这样一个强大的数据可视化工具,它提供了一站式的数据可视化解决方案,无论你是…

Docker实战笔记 二 Springboot Idea 插件打包

1.上传springboot的jar rootcenots-7.5:/home/code#rz -----app.jar 2.编辑Dockerfile rootcenots-7.5:/home/code#vi Dockerfile内容 FROM openjdk:8 # 作者 MAINTAINER nnd # 声明要使用的端口 EXPOSE 8080 # VOLUME 指定了临时文件目录为/tmp。# 将本地包添加到容器中并…

力扣题:字符的统计-12.7

力扣题-12.7 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:467. 环绕字符串中唯一的子字符串 解题思想:记录下以字母s[i]结尾的最大的字串个数,然后统计a-z每个字母结尾的最大字串的个数进行i相加 class Solution(object…

DDD架构思想专栏一《初识领域驱动设计DDD落地》

引言 最近准备给自己之前写的项目做重构,这是一个单体架构的小项目,后端采用的是最常见的三层架构。因为项目比较简单,其实采用三层架构就完全够了。但是呢,小编最近在做DDD架构的项目,于是就先拿之前写的一个老项目试…

从传统到胜利:广汽集团汽车产业创新之旅

置身于汽车行业百年未有之大变局,作为传统车企中的排头兵,广汽创新可圈可点,广汽近年来取得了骄人业绩,不论是整体产销规模,还是新能源汽车产业化、新技术领域开拓等,都呈现节节攀升的局面。本文奖从产业变…

Java项目学生管理系统一前后端环境搭建

在现代的软件开发中,学生管理系统是一个常见的应用场景。通过学生管理系统,学校能够方便地管理学生的信息、课程安排和成绩等数据。本文将介绍如何使用Java语言搭建一个学生管理系统的前后端环境,并提供一个简单的示例。 1.环境搭建 学生管…

入门指南:使用Prometheus监控Linux服务器

Prometheus介绍 Prometheus是一款开源的监控系统,主要用于收集、存储和查询时间序列数据,以便于对系统进行监控和分析。以下是Prometheus的架构图介绍: Prometheus的架构由四个主要组件组成: Prometheus Server(Prom…