当前位置: 首页 > news >正文

python树长子兄弟链存储结构(孩子兄弟链存储结构)

长子兄弟链存储结构(孩子兄弟链存储结构)解释:

        长子兄弟链存储结构是一种树的存储结构,它使用孩子兄弟表示法(也称作左孩子右兄弟表示法)来表示树的结构。这种表示方法主要用于存储一般的树,而不是二叉树。

        在长子兄弟链存储结构中,树中的每个节点都有两个指针:一个指向它的第一个孩子节点,另一个指向它的右边(兄弟)的节点。这种表示方法使用了类似链表的结构,使得树的每个节点可以灵活地连接到它的子节点和兄弟节点。

        使用长子兄弟链存储结构,可以有效地表示任意形状的树,而且在进行树的遍历和操作时也相对容易。这种存储结构的主要优点是节省空间,因为不需要额外的指针来表示左右子树,同时也便于实现树的各种操作,如插入、删除和查找等。长子兄弟链存储结构在树的应用中具有一定的灵活性和效率。

 代码:

class BENode():def __init__(self,data,son=None,brother=None):self.data=dataself.son=sonself.brother=brotherclass BEStree():def __init__(self):self.data=[]# 建立根节点,并存储在self.data中def create_t(self,e):a = BENode(e)self.data.append(a)# 建立节点与节点之间关系,并存储在self.data中,brother的存储优先级<son的存储优先级(增加节点)def create_other(self,i,son=None,brother=None):#i为节点的下标if son!=None:s = BENode(son)self.data.append(s)self.data[i].son = sif brother!=None:b = BENode(brother)self.data.append(b)self.data[i].brother=b# 删除节点值def delx(self,e):for i in range(len(self.data)):# 从节点属性删除节点值if self.data[i].brother != None:if self.data[i].brother.data==e:self.data[i].brother.data=Nonebreakif self.data[i].son != None:if self.data[i].son.data==e:self.data[i].son.data=Nonebreakfor i in range(len(self.data)):# 从存储结构删除if self.data[i].data==e:self.data[i].data=Nonebreak#修改节点值,将e修改为n_edef change(self,e,n_e):for i in range(len(self.data)):# 从节点属性修改节点值if self.data[i].brother!=None:if self.data[i].brother.data==e:self.data[i].brother.data=n_ebreakif self.data[i].son != None:if self.data[i].son.data==e:# 从存储结构修改self.data[i].son.data=n_ebreakfor i in range(len(self.data)):if self.data[i].data==e:self.data[i].data=n_ebreak# 查询节点值,返回节点def find(self,e):for i in range(len(self.data)):if self.data[i].data==e:return self.data[i]#先序遍历,传入的t的参数为self.data[0]def display_f(self,t):if t!=None:print(t.data,end=' ')self.display_f(t.son)self.display_f(t.brother)#后序遍历def display_t(self,t):if t!=None:self.display_t(t.son)self.display_t(t.brother)print(t.data,end=' ')#中序遍历def display_m(self,t):if t!=None:self.display_m(t.son)print(t.data,end=' ')self.display_m(t.brother)a = BEStree()
a.create_t('A')
a.create_other(0,'B')
a.create_other(1,'D','C')
a.create_other(2,'G')
a.create_other(3,'E')
a.create_other(5,None,'F')
#后序遍历
a.display_t(a.data[0])
print()
#中序遍历
a.display_m(a.data[0])
print()
#先序遍历
a.display_f(a.data[0])
print()
# 改变值
a.change('A',"10")
a.display_f(a.data[0])
print()
# 删除值
a.delx('10')
a.display_f(a.data[0])

长子兄弟链存储结构的优点:

        1. 节省空间:相比于其他树的存储结构,长子兄弟链存储结构更加节省空间,因为它不需要额外的指针来表示左右子树。

        2. 灵活性:长子兄弟链存储结构可以有效地表示任意形状的树,包括多叉树和不规则树,因此具有较强的灵活性。

        3. 操作便利:在长子兄弟链存储结构中,树的节点之间使用指针连接,这样可以方便地进行树的遍历、插入、删除和查找等操作。

长子兄弟链存储结构的缺点:

        1. 操作复杂性:相对于其他树的存储结构,长子兄弟链存储结构的操作可能会更加复杂,因为需要考虑节点之间的兄弟关系和孩子关系。

        2. 不适用于特定场景:长子兄弟链存储结构主要适用于一般的树结构,对于特定的树,如二叉树或平衡树等,可能不是最佳的选择。

        3. 不适合频繁修改的树:长子兄弟链存储结构对于频繁进行插入和删除操作的树可能不太适用,因为这样的操作可能会导致链的频繁调整,影响效率。

相关文章:

python树长子兄弟链存储结构(孩子兄弟链存储结构)

长子兄弟链存储结构&#xff08;孩子兄弟链存储结构&#xff09;解释&#xff1a; 长子兄弟链存储结构是一种树的存储结构&#xff0c;它使用孩子兄弟表示法&#xff08;也称作左孩子右兄弟表示法&#xff09;来表示树的结构。这种表示方法主要用于存储一般的树&#xff0c;而不…...

开源和闭源软件对开发的影响

开源软件的优势&#xff1a; 开源性&#xff1a;开源软件允许任何人查看、修改和发布源代码&#xff0c;这促进了代码的共享和集体学习。透明性&#xff1a;开源软件提高了软件的透明度&#xff0c;使用户可以更好地理解软件的工作原理&#xff0c;增加对软件的信任。社区支持…...

centos无法进入系统之原因解决办法集合

前言 可爱的小伙伴们&#xff0c;由于精力有限&#xff0c;暂时整理了两类。如果没有你遇到的问题也没有关系&#xff0c;欢迎底下留言评论或私信&#xff0c;小编看到后第一时间帮助解决 一. Centos 7 LVM xfs文件系统修复 情况1&#xff1a; [sda] Assuming drive cache:…...

【Linux】系统初始化配置

CentOS 7 的虚拟机安装后必须要做的几个操作&#xff0c;记录以下&#xff0c;网络配置修改、yum源安装、基础工具安装&#xff1a; 1、先修改权限&#xff0c;新建普通用户&#xff0c;并授权普通用户apps 的sudo权限&#xff1b; useradd apps password apps visudo apps A…...

使用VC++设计程序对一幅256级灰度图像进行全局固定阈值分割、自适应阈值分割

图像分割–全局固定阈值分割、自适应阈值分割 获取源工程可访问gitee可在此工程的基础上进行学习。 该工程的其他文章&#xff1a; 01- 一元熵值、二维熵值 02- 图像平移变换&#xff0c;图像缩放、图像裁剪、图像对角线镜像以及图像的旋转 03-邻域平均平滑算法、中值滤波算法、…...

【ArcGIS Pro微课1000例】0035:栅格影像拼接(dem高程数据)

本实验讲解在ArcGIS Pro中,栅格数据的两种拼接(镶嵌)方法,适用于遥感影像、DOM、DEM、DSM等常见栅格数据。 文章目录 一、加载实验数据二、栅格拼接工具1. 镶嵌2. 镶嵌至新栅格三、注意事项四、拓展阅读一、加载实验数据 加载配套实验数据中的0035.rar中的两个dem数据,如…...

Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐FPGA图像处理方案FPGA图像缩放方案自己写的HLS图像缩放方案 3、设计思路详解Video Processing Subsystem 介绍 4、工程代码详解PL 端 FPGA 逻辑设计PS 端 SDK 软件设计 5、工程移植说明vivado版本不一致处理FPGA型号不一致处理其他注意事项…...

【C】内存函数

目录 1. memcpy 使用和模拟实现 2. memmove 使⽤和模拟实现 3. memset 函数的使用 4. memcmp 函数的使用 1. memcpy 使用和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); • 函数memcpy从source的位置开始向后复制num个字节的数据到d…...

windows系统玩游戏找不到d3dx9_35.dll缺失的解决方法

分享一个我们在打开游戏或许软件过程中遇到的问题——“由于找不到d3dx9_35.dll,无法继续执行代码”的五个修复方案。这个问题可能会影响到我们的工作和娱乐效率&#xff0c;甚至可能导致工作的延期。因此&#xff0c;我希望通过今天的文章&#xff0c;能够帮助大家更好地解决这…...

webshell之内置函数免杀

原始webshell 查杀的点在于Runtime.getRuntime().exec非常明显的特征 利用ProcessBuilder替换Runtime.getRuntime().exec(cmd) Runtime.getRuntime().exec(cmd)其实最终调用的是ProcessBuilder这个函数&#xff0c;因此我们可以直接利用ProcessBuilder来替换Runtime.getRunti…...

react高阶成分(HOC)

使用React函数式组件写了一个身份验证的一个功能&#xff0c;示例通过高阶组件实现的一个效果展示&#xff1a; import React, { useState, useEffect } from react;// 定义一个高阶组件&#xff0c;它接受一个组件作为输入&#xff0c;并返回一个新的包装组件 const withAuth…...

<JavaEE> Thread线程类 和 Thread的常用方法

目录 一、Thread概述 二、构造方法 三、常用方法 1.1 getId()、getName()、getState()、getPririty() 1.2 start() 1.3 isDaemon()、setDaemon() 1.4 isAlive() 1.5 currentThread() 1.6 Interrupt()、interrupted()、isInterrupted() 1.6.1 方法一&#xff1a;添加共…...

Linux加强篇004-Vim编辑器与Shell命令脚本

目录 前言 1. Vim文本编辑器 1.1 编写简单文档 1.2 配置主机名称 1.3 配置网卡信息 1.4 配置软件仓库 2. 编写Shell脚本 2.1 编写简单的脚本 2.2 接收用户的参数 2.3 判断用户的参数 3. 流程控制语句 3.1 if条件测试语句 3.2 for条件循环语句 3.3 while条件循环语…...

【shell脚本】常见的shell脚本面试题目

1、请用shell脚本for,while,until这三种方式写出输出1到100的所有偶数的方法。 sum=0;for((i=0;i<=100;i+=2));do let sum+=i;done;echo $sum sum=0;i=0;while [ $i -le 100 ];do let sum+=i;let i+=2;done;echo $sum sum=0;i=0;until [ $i -gt 100 ];do let sum+=i;let i+…...

Android设计模式--外观模式

弈之为术&#xff0c;在人自悟 一&#xff0c;定义 外观模式要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。提供一个高层次的接口&#xff0c;使得子系统更易于使用。 外观模式在开发中的使用频率是非常高的&#xff0c;尤其是在第三方的SDK里面&#xff0…...

03_MySQL基本SQL语句讲解

#课程目标 能够创建、删除数据表能够对表里的数据记录进行增加、删除、修改、查询操作能够创建、删除用户能够给用户授权并回收权限了解delete和truncate语句的区别 #一、数据库基本操作 ##1、查看数据库相关信息 mysql> show databases; 查看所有数据库 mysql>…...

【C语法学习】28 - 字符测试函数

文章目录 1 isalnum()函数2 isalpha()函数3 islower()函数4 isupper()函数5 isdigit()函数6 isxdigit()函数7 iscntrl()函数8 isgraph()函数9 isspace()函数10 isblank()函数11 isprint()函数12 ispunct()函数13 tolower()函数14 toupper()函数 1 isalnum()函数 isalnum()函数…...

极兔快递查询,极兔快递单号查询,对需要的单号记录进行备注

批量查询极兔快递单号的物流信息&#xff0c;对需要的快递单号记录进行备注。 所需工具&#xff1a; 一个【快递批量查询高手】软件 极兔快递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;并登录 步骤2&#xff1a;点击主界面左…...

树的序列化与反序列化

1 序列化与反序列化 二叉树的序列化与反序列化 1.1 实现思路 方式一&#xff1a;前序遍历 通过前序遍历方式实现二叉树的序列化将结果存入队列中要注意空节点也要存null 方式二&#xff1a;层序遍历 层序遍历也是用队列实现注意从左到右&#xff0c;遇到空节点存null 1.2 …...

定长子网划分和变长子网划分问题_二叉树解法_通俗易懂_配考研真题

引入:定长子网划分和变长子网划分的基本概念 定长子网划分和变长子网划分的基本概念 目前常用的子网划分&#xff0c;是基于CIDR的子网划分&#xff0c;也就是将给定的CIDR地址块划分为若干个较小的CIDR地址块。 定长子网划分: 使用同一个子网掩码来划分子网&#xff0c;因…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...