python二叉树链树_树的链式存储结构

二叉链树是一种树状数据结构,其中每个节点最多有两个子节点,分别称为左子节点和右子节点。每个节点包含一个数据元素和指向其左右子节点的指针。二叉链树可以是空树,也可以是具有以下特点的非空树:
1. 每个节点最多有两个子节点。
2. 左子节点和右子节点的顺序是固定的,即左子节点始终位于父节点的左侧,右子节点始终位于父节点的右侧。
3. 每个节点的子节点也可以是空节点,表示该节点没有对应的子节点。

二叉链树常用于实现二叉搜索树、堆、表达式树等数据结构和算法。

广度优先遍历:

二叉树的广度优先遍历(BFS)是从树的根节点开始,按照层次的顺序依次访问每一层的节点,直到遍历完整棵树为止。具体步骤如下:

1. 首先将根节点入队列。
2. 从队列中取出一个节点,访问该节点,并将其所有子节点依次入队列。
3. 重复步骤2,直到队列为空。

在遍历过程中,节点的访问顺序是按照从上到下、从左到右的顺序进行的。通过这种方式,可以逐层地访问二叉树的所有节点,实现广度优先遍历。

    def breadth_travel(self):"""广度遍历"""if self.root == None:returnqueue=[self.root]while queue:cur_node = queue.pop(0)print(cur_node.data,end=" ")if cur_node.lchild is not None:queue.append(cur_node.lchild)if cur_node.rchild is not None:queue.append(cur_node.rchild)

先序遍历:

二叉树的先序遍历(preorder traversal)是一种深度优先遍历方式,具体步骤如下:

1. 访问根节点。
2. 递归地对根节点的左子树进行先序遍历。
3. 递归地对根节点的右子树进行先序遍历。

在遍历过程中,节点的访问顺序是根节点、左子树、右子树。通过先序遍历,可以按照根节点、左子树、右子树的顺序访问二叉树的所有节点。

    def preorder(self, root):"""先序遍历"""if root is None:returnprint(root.data, end=" ")self.preorder(root.lchild)self.preorder(root.rchild)

中序遍历:

二叉树的中序遍历(inorder traversal)是一种深度优先遍历方式,具体步骤如下:

1. 递归地对根节点的左子树进行中序遍历。
2. 访问根节点。
3. 递归地对根节点的右子树进行中序遍历。

在遍历过程中,节点的访问顺序是左子树、根节点、右子树。通过中序遍历,可以按照左子树、根节点、右子树的顺序访问二叉树的所有节点。

    def inorder(self, root):"""中序遍历"""if root is None:returnself.inorder(root.lchild)print(root.data, end=" ")self.inorder(root.rchild)

 后续遍历:

二叉树的后序遍历(postorder traversal)是一种深度优先遍历方式,具体步骤如下:

1. 递归地对根节点的左子树进行后序遍历。
2. 递归地对根节点的右子树进行后序遍历。
3. 访问根节点。

在遍历过程中,节点的访问顺序是左子树、右子树、根节点。通过后序遍历,可以按照左子树、右子树、根节点的顺序访问二叉树的所有节点。

    def postorder(self, root):"""后序遍历"""if root is None:returnself.postorder(root.lchild)self.postorder(root.rchild)print(root.data, end=" ")


全部代码: 

class Node:def __init__(self,data):self.data = dataself.lchild = Noneself.rchild = None
class Tree:def __init__(self):self.root = Nonedef add(self,data):node = Node(data)if self.root is None:self.root = nodereturnqueue = [self.root]while queue:cur_node = queue.pop(0)if cur_node.lchild is None:cur_node.lchild = nodereturnelse:queue.append(cur_node.lchild)if cur_node.rchild is None:cur_node.rchild = nodereturnelse:queue.append(cur_node.rchild)def breadth_travel(self):"""广度遍历"""if self.root == None:returnqueue=[self.root]while queue:cur_node = queue.pop(0)print(cur_node.data,end=" ")if cur_node.lchild is not None:queue.append(cur_node.lchild)if cur_node.rchild is not None:queue.append(cur_node.rchild)def preorder(self, root):"""先序遍历"""if root is None:returnprint(root.data, end=" ")self.preorder(root.lchild)self.preorder(root.rchild)def inorder(self, root):"""中序遍历"""if root is None:returnself.inorder(root.lchild)print(root.data, end=" ")self.inorder(root.rchild)def postorder(self, root):"""后序遍历"""if root is None:returnself.postorder(root.lchild)self.postorder(root.rchild)print(root.data, end=" ")def no_preorder(self,root):"""非递归的先序遍历"""if root==None:returnalist=[root]while alist:cur=alist.pop()print(cur.data)if cur.rchild != None:alist.append(cur.rchild)if cur.lchild != None:alist.append(cur.lchild)def no_inorder(self,root):cur=rootalist=[]while cur or alist:if cur!=None:alist.append(cur)cur=cur.lchildelse:cur=alist.pop()print(cur.data)cur=cur.rchild

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

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

相关文章

netstat

netstat 命令用于显示网络状态 参数说明: -a或--all 显示所有连线中的Socket,默认不显示LISTEN相关 -n 拒绝显示别名,能显示数字的全部转化成数字 -e或--extend 显示网络扩展信息(User,Inode) -p或--programs 显示正在使用So…

JavaEE 多线程01

为什么引入多线程? 首先进程已经能很好的完成多任务这个情景下的并发编程了,那为什么又引入多线程呢? 这是因为在一些情景下,我么需要大量的创建和销毁进程来完成一些任务,此时多进程对系统的开销就会很大了. 假设有这样一个场景,服务器同时接收到很多个服务请求,这个时候服务…

Python基础教程: sorted 函数

嗨喽,大家好呀~这里是爱看美女的茜茜呐 sorted 可以对所有可迭代的对象进行排序操作, sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。 从新排序列表。 👇 👇 👇 更多精彩机密、教程…

taro h5 ios解决input不能自动获取焦点拉起键盘

描述:页面中有个按钮,点击跳转到第二个页面(有input),能直接获取焦点拉起键盘输入 安卓: 直接用focus() ios: focus无效,必须手动拉起 原理: 点击按钮的时候拉起一…

一元三次方程求解——浮点数二分

题目描述 思路 根与根之差的绝对值>1。可以得出距离为1的区间最多只有一个根若存在2个数x1和x2&#xff0c;且x1 < x2&#xff0c;f(x1) x f(x2) < 0&#xff0c;则(x1, x2)之间一定有一个根我们可以遍历每一个区间为1的范围&#xff0c;先判断左端点是否是根&#x…

Python---global关键字---设置全局变量

global 英 /ˈɡləʊb(ə)l/ adj. 全球的&#xff0c;全世界的&#xff1b;全面的&#xff0c;整体的&#xff1b;&#xff08;计算机&#xff09;全局的&#xff1b;球形的 需求&#xff1a;如果有一个数据&#xff0c;在函数A和函数B中都要使用&#xff0c;该怎么办&…

【PyGIS】使用阿里AIEarth快速下载指定区域指定年份的土地利用数据

说明 中国逐年土地覆盖数据集(CLCD) 由武汉大学的杨杰和黄昕教授团队基于Landsat影像制作了中国逐年土地覆盖数据集(annual China Land Cover Dataset, CLCD),数据包含1985—2021年中国逐年土地覆盖信息。研究团队基于Landsat长时序卫星观测数据,构建时空特征,结合随机森…

Linux常用命令——blockdev命令

在线Linux命令查询工具 blockdev 从命令行调用区块设备控制程序 补充说明 blockdev命令在命令调用“ioxtls”函数&#xff0c;以实现对设备的控制。 语法 blockdev(选项)(参数)选项 -V&#xff1a;打印版本号并退出&#xff1b; -q&#xff1a;安静模式&#xff1b; -v&…

【正则插件】前端正则插件以及预览插件推荐

1&#xff09; 2&#xff09; any-rule Pegex Previewer 下载好插件之后 在代码层右键选择 选择你需要的正则表达式&#xff0c;随后可以使用第二个插件 正则表达式插入之后顶部会有 Test Regex.. 点击会出现以下内容 将他 ctrl a 删除&#xff0c;输入你对应的正则表达…

电脑序列号查询

电脑序列号是厂商给每台电脑分配的一个产品识别码&#xff0c;也称为S/N&#xff08;Serial Number&#xff09;。主要用来查询电脑的出厂日期、保修状态、生产产地、产品配置等信息。电脑序列号查询有以下几种方法&#xff1a; 1、电脑机箱外壳&#xff1b; 2、系统信息/命令…

梁培强:塑造下一代投资高手

在当前全球经济动荡和金融市场快速变化的背景下&#xff0c;梁培强的投资教育计划不仅仅是一套课程&#xff0c;它是对传统投资理念的深度挑战和革新。梁培强&#xff0c;拥有超过二十年金融行业经验的资深分析师&#xff0c;正在引领一场投资者教育的变革&#xff0c;旨在培养…

Centos 7 安装yum(针对python卸载yum出错)

提前下载所需安装包&#xff0c;按照下面顺序安装即可完成&#xff0c;每个依赖包必须正确安装 下载地址&#xff1a;http://mirrors.163.com/centos/7/os/x86_64/Packages/ rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps ##强制删除已安装程序及其关联 whereis …

基于SSM+Vue的社区共享食堂管理系统

基于SSM的社区共享食堂管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringMyBatisSpringMVC工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 菜品详情 管理员界面 摘要 社区共享食堂管理系统是一种基于SSM&#xf…

Python生成exe文件

Python如何生成exe文件 在终端执行 pip install pyinstaller 在终端执行pyinstaller E:\fund_data\GetFund.py&#xff0c;运行结束后会在D:\Python\Python311\Scripts\dist\目录下生成GetFund.exe文件 3.双击exe文件运行&#xff0c;如果未出现预期结果&#xff0c;可以把e…

含分布式电源的配电网可靠性评估(matlab代码)

1主要内容 该程序参考《基于仿射最小路法的含分布式电源配电网可靠性分析》文献方法&#xff0c;通过概率模型和时序模型分别进行建模&#xff0c;实现基于概率模型最小路法的含分布式电源配电网可靠性评估以及时序模型序贯蒙特卡洛模拟法的含分布式电源配电网可靠性评估。程序…

区间第k小数 (可持久化线段树、主席树)

题意&#xff1a;多次询问&#xff0c;每次询问某区间的第k小数。 可持久化线段树&#xff1a; 掺杂了一点前缀和的思想&#xff0c;对于每一个1 ~ i 的区间都建一个树&#xff0c;每个节点存的都是一个线段树&#xff0c;值存的是当前区间中初始数组按大小排序后[l, r]之间的…

【AGC】鸿蒙应用软件包上传问题解析

【问题背景】 近期收到了一些反馈&#xff0c;一些鸿蒙元服务开发者在发布应用市场的过程中&#xff0c;上传.app包时遇到了不同的报错&#xff0c;导致上传失败&#xff0c;下面来看一下这些报错的具体原因&#xff0c;如何正确打包上传。 【问题描述1】 HarmonyOS元服务软件…

51单片机PWM控制LED灯渐明渐暗实验

51单片机PWM控制LED灯渐明渐暗实验 1.概述 这篇文章介绍单片机的PWM通过占空比控制LED灯的渐明渐暗效果&#xff0c;通过该实验掌握PWM的原理以及应用它做一些事情。 2.操作步骤 2.1.硬件电路 1.硬件准备 名称型号数量单片机STC12C20521LED彩灯无2晶振12MHZ1电容30pf2电阻…

ubuntu上查看各个进程的实时CPUMEM占用的办法

top常见参数top界面分析system monitorhtop1、查看htop的使用说明2、显示树状结构3、htop使用好文推荐top top的用法应该是最为普遍的 常见参数 -d 更新频率,top显示的界面几秒钟更新一次 -n 更新的次数,top显示的界面更新多少次之后就自动结束了 当然也可以将top日志通过…

Android进阶知识:ANR的定位与解决

1、前言 ANR对于Android开发者来说一定不会陌生&#xff0c;从刚开始学习Android时的一不注意就ANR&#xff0c;到后来知道主线程不能进行耗时操作注意到这点后&#xff0c;程序出现ANR的情况就大大减少了&#xff0c;甚至于消失了。那么真的是只要在主线程做耗时操作就会产生…