【数据结构】树、森林与二叉树的转换 |树的存储 |双亲表示法 |孩子表示法 |孩子兄弟表示法

📖专栏文章:数据结构学习笔记
🪪作者主页:格乐斯

前言

树的存储

  • 双亲表示法
  • 孩子表示法
  • 孩子兄弟表示法

树、森林与二叉树的转换

树的存储

双亲表示法

首先给每个结点编号,再将这些结点的双亲结点的序号存储起来,命名为parent

这样一来,通过查询每个结点的parent并将其组织起来即可还原出二叉树

在这里插入图片描述

以上图这棵树为例,使用双亲表示对其进行存储

  • 顺序结构存储

在这里插入图片描述

  • 链式结构存储

在这里插入图片描述


孩子表示法

顺序+链式结构存储(每个结点的存储是顺序结构,孩子结点的存储是链式结构)

在这里插入图片描述

每个结点的孩子结点以链表的结构存储起来,孩子链表的头指针将存放在双亲结点的指针域


孩子兄弟表示法(二叉链表表示法)

存储逻辑:每个结点的左子结点为孩子,右子结点为兄弟

如下图:
在这里插入图片描述


树与二叉树的转换

树、二叉树转换的前提

  • 两者都能使用孩子兄弟表示法转换成逻辑相同的二叉链表
  • 二叉树必须遵循左结点是孩子结点,右结点是兄弟结点的逻辑

树转二叉树

在这里插入图片描述

如上图有一棵树,将其转为二叉树,分为以下三步骤:

  1. 加线:在所有兄弟结点之间加一条连线
    在这里插入图片描述

  2. 去线:对树中每个结点,只保留它与第一个孩子结点的连线,删除与其他孩子结点的连线
    在这里插入图片描述

  3. 层次调整:调整转换后的二叉树,使得其以二叉树的结构层次排列
    在这里插入图片描述


二叉树转树

  1. 加线:重新连接双亲结点与其他孩子结点的连线
    在这里插入图片描述

  2. 去线:删除兄弟结点之间的连线
    在这里插入图片描述

  3. 层次调整:使转换后的树结构层次分明
    在这里插入图片描述


森林与二叉树的转换

森林转二叉树

在这里插入图片描述

如上图,三棵树构成一个森林,将其转化为一棵二叉树,分为三步骤:

  1. 树转二叉树:先将森林的每棵树转成二叉树
    在这里插入图片描述

  2. 连线:连接所有二叉树的根结点
    在这里插入图片描述

  3. 层次调整:使转换后的二叉树结构层次分明
    在这里插入图片描述


二叉树转森林

  1. 去线:断开二叉树根结点与 其兄弟结点之间的连线,得到一个全是二叉树的森林
    在这里插入图片描述

  2. 二叉树转树:将森林里的二叉树转换成树
    在这里插入图片描述

  3. 层次调整:调整转换后的树的层次结构
    在这里插入图片描述

森林与二叉树的转换的总结

森林中的每一颗树都是兄弟,也就是说每棵树的根结点互为兄弟结点。那么在森林转二叉树的过程中,应该使用孩子兄弟表示法的逻辑连接森林中的每棵二叉树

(注:孩子兄弟表示法的逻辑是 二叉树的根结点的左结点是孩子,右节点是兄弟)


总结

本文主要介绍了树、森林与二叉树的转换,树的存储包括双亲表示法、孩子表示法、孩子兄弟表示法


文章到这结束啦,感谢阅读~

如果文章的论述或代码等出现错误,欢迎前来指正!

如果你觉得文章写的还不错,记得点赞收藏评论三连~ ❤

img

  • 19
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值