python树的双亲存储结构

这种存储结构是一种顺序存储结构,采用元素形如“[结点值,双亲结点索引]”的列表表示。通常每个结点有唯一的索引(或者伪地址),根结点的索引为0,它没有双亲结点,其双亲结点的索引为-1。例如,所示的树对应的双亲存储结构如下:
#树的双亲存储结构

t=[["A",-1],["B",0],["C",0],["D",1],["E",1],["F",1],["G",4]]


在该存储结构t中,索引为i的结点是t[i],其中t[i][0]为结点值,t[i][1]为该结点的双亲结点的索引。

若一棵树采用双亲在储结构存储,设计一个算法求指定索引是i的结点的层次。
解:用cnt 表示索引i的结点的层次(初始为1)。沿着双亲指针向上移动,当没有到达根结点时循环:cnt 增1,i向上移动一次。当到达根结点时cnt 恰好为原索引i结点的层次,最后返回cnt。对应的算法如下:


```python
def find_level(parent, i):
    cnt = 1
    while parent[i] != -1:
        cnt += 1
        i = parent[i]
    return cnt
```

 python树的双亲存储结构:

class FNode():
    def __init__(self,name=None,i=None):#name为数据,i为其对应的父节点下标
        self.node=[name,i]
class ftree():#存储节点数据
    def __init__(self):
        self.data=[]
    #增加
    def add(self,name,i):#添加节点数据进入数的结构
        p = FNode(name,i)#建立节点
        self.data.append(p.node)#添加进入
    #创建
    def CreateTree(self,arr):#传入对应数据建立数arr为一个树关系的二维列表
        for i in arr:
            self.data.append(i)
    #删除
    def Dex(self,name,i):#给出节点的name和i进行删除
        for j in range(len(self.data)):
            if self.data[j][0]==name and self.data[j][1]==i:
                self.data.pop(j)
                break
    # 修改节点数据
    def alter(self,name,i,n_name):
        for j in range(len(self.data)):
            if self.data[j][0]==name and self.data[j][1]==i:
                self.data[j][0]=n_name
                break
    #查找节点
    def find(self,name,i):
        for j in range(len(self.data)):
            if self.data[j][0]==name and self.data[j][1]==i:
                return self.data[j]

    #遍历树结构,双亲存储单位的结构决定了它只能层次遍历
    def display(self):
        for i in range(len(self.data)):
            print(self.data[i][0],end=" ")
        print()

t = [['A',-1],['B',0],['C',0],['D',1],['E',1],['F',1],['G',4]]
tree_1 = ftree()
tree_1.CreateTree(t)
tree_1.display()
tree_1.add('H',4)
tree_1.display()
tree_1.Dex('H',4)
tree_1.display()
tree_1.alter('G',4,'5')
tree_1.display()
print(tree_1.find('A',-1))

双亲存储结构利用了每个结点(根节点除外)有啡一双亲的性质。在这种存储结构
中,求某个结点的双亲结点十分容易,但求某个结点的孩子结点时需要遍历整个结构。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NVM得介绍和详细使用教程

NVM​​​​​​​(Node Version Manager)是一个用于管理多个Node.js版本的工具。它允许您在同一台计算机上轻松地切换和管理不同的Node.js版本。以下是NVM的介绍和详细使用教程: 安装NVM: 首先,您需要在计算机上安装N…

一文2000字使用JMeter进行接口测试教程!(建议收藏)

安装 使用JMeter的前提需要安装JDK,需要JDK1.7以上版本目前在用的是JMeter5.2版本,大家可自行下载解压使用 运行 进入解压路径如E: \apache-jmeter-5.2\bin,双击jmeter.bat启动运行 启动后默认为英文版本,可通过Options – Cho…

【开源】基于Vue.js的固始鹅块销售系统

项目编号: S 060 ,文末获取源码。 \color{red}{项目编号:S060,文末获取源码。} 项目编号:S060,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 鹅块类型模块2.3 固…

【miniQMT实盘量化5】获取财务报表数据

前言 上面文章,我们介绍了如何获取实时数据,这篇文章,我们继续往下探讨,介绍关于财务报表数据的获取。 财务报表数据 财务报表数据,也就是常说的基本面数据,是除了行情数据之外,辅助我们投资…

qgis添加xyz栅格瓦片

方式1:手动一个个添加 左侧浏览器-XYZ Tiles-右键-新建连接 例如添加高德瓦片地址 https://wprd01.is.autonavi.com/appmaptile?langzh_cn&size1&style7&x{x}&y{y}&z{z} 双击即可呈现 收集到的一些图源,仅供参考,其中一…

Java核心知识点整理大全11-笔记

Java核心知识点整理大全-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全2-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全3-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全4-笔记-CSDN博客 Java核心知识点整理大全5-笔记-CSDN博客 Java核心知识点整理大全6…

线性代数的艺术

推荐一本日本网友Kenji Hiranabe写的《线性代数的艺术》。这本书是基于MIT大牛Gilbert Strang教授的《每个人的线性代数》制作的。 虽然《线性代数的艺术》这本书仅仅只有12页的内容,就把线性代数的重点全画完了,清晰明了。 《线性代数的艺术》PDF版本&…

linux高级篇基础理论六(firewalld,防火墙类型,,区域,服务端口,富语言)

♥️作者:小刘在C站 ♥️个人主页: 小刘主页 ♥️不能因为人生的道路坎坷,就使自己的身躯变得弯曲;不能因为生活的历程漫长,就使求索的 脚步迟缓。 ♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏:云计算技…

010 OpenCV中的4种平滑滤波

目录 一、环境 二、平滑滤波 2.1、均值滤波 2.2、高斯滤波 2.3、中值滤波 2.4、双边滤波 三、完整代码 一、环境 本文使用环境为: Windows10Python 3.9.17opencv-python 4.8.0.74 二、平滑滤波 2.1、均值滤波 在OpenCV库中,blur函数是一种简…

【精选】框架初探篇之——MyBatis入门必知【面试常问】

什么是MyBatis? MyBatis是一个半自动的ORM框架,其本质是对JDBC的封装。使用MyBatis不需要写JDBC代码,但需要程序员编写SQL语句。之前是apache的一个开源项目iBatis,2010年改名为MyBatis。 补充: Hibernate也是一款持久层ORM框架&…

文章解读与仿真程序复现思路——电工技术学报EI\CSCD\北大核心《面向差异化电源成本结构的容量市场机制设计》

这个文章标题涉及到容量市场机制设计,着重考虑了电源成本结构的差异性。下面对标题中的关键词进行解读: 面向(Facing): 表示该容量市场机制设计是以某种方向、取向或目标为基础的。在这里,可能指的是设计是…

第五天 用Python批量处理Excel文件,实现自动化办公

用Python批量处理Excel文件,实现自动化办公 一、具体需求 有以下N个表,每个表的结构一样,如下: 需要把所有表数据汇总,把每个人的得分、积分分别加起来,然后按总积分排名,总积分一致时&#xff…

Flutter学习(四)如何取消listview的越界效果

背景 在flutter的开发过程中,ListView是很常见的一个组件,但是,由于ListView的某些自带的体验,导致不太好的用户体验。例如ListView中,滑动到顶部或者底部的时候,再次滑动,会有越界的效果&…

Keil工程打开发现目标芯片无法选择解决方案

买了一个开发板,配套有一些底层驱动的例程,打开后发现目标芯片无法选择,对应的下载Flash FLM文件也无法选择。从提示框中可以知道所提供的例程是Keil4的例程,我电脑上安装的Keil版本是Keil版本,估计是这个原因导致工程…

机器人制作开源方案 | 智能图书搬运机器人

作者:张宸豪 戚益凡 陈世达 高梓钦 谭清 单位:华北科技学院 指导老师:罗建国 韩红利 阅读对于学生的重要性毋庸置疑,因此图书馆是一个校园非常重要的组成部分,图书馆的书籍借阅,能为学生提供非常大的…

人工智能对网络安全的影响越来越大

如果问当前IT行业最热门的话题是什么,很少有人会回答除了人工智能(AI)之外的任何话题。 在不到 12 个月的时间里,人工智能已经从一项只有 IT 专业人员才能理解的技术发展成为从小学生到作家、程序员和艺术家的每个人都使用的工具…

基于单片机设计的大气气压检测装置(STC89C52+BMP180实现)

一、前言 本项目设计一个大气气压检测装置,该装置以单片机为基础,采用STC89C52作为核心控制芯片,结合BMP180模块作为气压传感器。大气气压,也就是由气体重力在大气层中产生的压力,其变化与天气预报、气象观测以及高度…

Python Pyvis库详解:创建交互式网络图

更多Python学习内容:ipengtao.com 大家好,我是涛哥,今天为大家分享 Python Pyvis库详解:创建交互式网络图,文章4000字,阅读大约15分钟,大家enjoy~~ Pyvis是一个基于JavaScript库NetworkX的Pytho…

【matlab程序】南海土台风画法

【matlab程序】南海土台风画法 图片 往期推荐 图片 【python海洋专题一】查看数据nc文件的属性并输出属性到txt文件 【python海洋专题二】读取水深nc文件并水深地形图 【python海洋专题三】图像修饰之画布和坐标轴 【Python海洋专题四】之水深地图图像修饰 【Python海洋专…

U-boot(四):start_armboot

本文主要探讨210的uboot启动的第二阶段,主要函数为start_armboot。 uboot 一阶段初始化SoC内部部件(看门狗、时钟等),初始化DDR,重定位 二阶段初始化其余硬件(iNand、网卡芯片)以及命令、环境变量等 启动打印硬件信息,进入bootdelay,读秒完后执行bootc…