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

【数据结构与算法】树的存储,森林 详解

树的几种存贮结构(双亲表示法、孩子表示法、孩子兄弟表示法)的优缺点,各自适应的运算。

  1. 双亲表示法:

    • 优点:方便查找双亲及其祖先结点
    • 缺点:
      1. 查找孩子和兄弟结点比较费事
      2. 未表示出结点之间的先后次序
    • 适应的运算:查找节点的双亲,合并两棵树等。
  2. 孩子表示法(孩子链表表示法):

    • 优点:
      1. 方便查找孩子及其子孙结点
      2. 能表示出结点之间的先后次序
    • 缺点:
      1. 查找结点的双亲及祖先费事
      2. 查找结点的兄弟也费事
    • 适应的运算:查找节点的孩子,插入节点等。
  3. 孩子兄弟表示法(二叉链表表示法):

    • 优点:
      1. 便于实现树的各种操作,如查找孩子、子孙或兄弟结点
      2. 能表示出结点之间的先后次序
    • 缺点:找结点的双亲及祖先比较费事
    • 适应的运算:查找节点的兄弟,查找节点的孩子,插入节点,删除节点等。

哪种存贮结构可将森林转为二叉树。

可以使用"左孩子右兄弟"表示法将森林转换为二叉树。在这种表示法中,每个节点有两个指针,一个指向其第一个孩子(左孩子),另一个指向其下一个兄弟(右兄弟)。

这种方法将森林中的每棵树转换为二叉树,其中树的根是二叉树的根,树的子树(森林)转换为二叉树的左子树,而森林的其余部分转换为二叉树的右子树。

此种结构各域的注释。

每个节点包含以下字段:

  • 数据域:存储节点的数据。
  • 左孩子指针:指向节点的第一个孩子。如果节点是叶子节点,那么这个指针为空。
  • 右兄弟指针:指向节点的下一个兄弟。如果节点是同一父节点的最后一个孩子,那么这个指针为空。

说明在这个结构中怎样找到森林的n棵树。

要找到森林的n棵树,可以从根节点开始,沿着"右兄弟"指针遍历n-1次。具体步骤如下:

  1. 从根节点开始。
  2. 沿着"右兄弟"指针移动n-1次。每次移动都将你带到下一棵树的根节点。
  3. 停止移动后,你将位于第n棵树的根节点。

这种方法的前提是,森林的所有树都在同一层级,并且根节点的"右兄弟"指针指向下一棵树的根节点。如果森林的树不在同一层级,或者根节点的"右兄弟"指针不指向下一棵树的根节点,那么这种方法可能无法正确找到第n棵树。

相关文章:

  • @PreAuthorize与@Secured注解的区别是什么?
  • 【Java】已解决java.net.HttpRetryException异常
  • html侧导航栏客服栏
  • 【Nprogress】页面跳转进度条
  • 广告联盟流量变现app开发
  • 搜索进入AI蓝海时代:谁在成为新玩家?
  • 小程序项目业务逻辑回忆1
  • 赶紧收藏!2024 年最常见 20道设计模式面试题(九)
  • 【机器学习300问】129、RNN如何在情感分析任务中起作用的?
  • 信息技术课如何禁止学生玩游戏
  • 【Gradio】Custom Components | Gradio组件关键概念 后端
  • 9.2JavaEE——JDBCTemplate的常用方法(一)excute()方法
  • GenICam标准(三)
  • 【全开源】沃德会务会议管理系统(FastAdmin+ThinkPHP+Uniapp)
  • 自然语言NLP的基础处理
  • [笔记] php常见简单功能及函数
  • interface和setter,getter
  • JS 面试题总结
  • mysql常用命令汇总
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • 闭包--闭包之tab栏切换(四)
  • 仿天猫超市收藏抛物线动画工具库
  • 基于组件的设计工作流与界面抽象
  • 来,膜拜下android roadmap,强大的执行力
  • 聊聊directory traversal attack
  • 微信开源mars源码分析1—上层samples分析
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 正则表达式-基础知识Review
  • ​数据结构之初始二叉树(3)
  • #Spring-boot高级
  • ${factoryList }后面有空格不影响
  • (1)(1.11) SiK Radio v2(一)
  • (4) PIVOT 和 UPIVOT 的使用
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (windows2012共享文件夹和防火墙设置
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (附源码)ssm高校实验室 毕业设计 800008
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (一)RocketMQ初步认识
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .Net Core 中间件验签
  • .NET Core中如何集成RabbitMQ
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .net 程序发生了一个不可捕获的异常
  • .NET 通过系统影子账户实现权限维持
  • .NET关于 跳过SSL中遇到的问题
  • @Autowired注解的实现原理
  • @在php中起什么作用?
  • []常用AT命令解释()
  • [Android]将私钥(.pk8)和公钥证书(.pem/.crt)合并成一个PKCS#12格式的密钥库文件
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [BZOJ4010]菜肴制作