树的存储与遍历

前言

在我第一篇的文章中,我大体概述了图的存储的知识点,那么这篇文章,我们就来介绍一下图的存储中特殊的一环:树的存储与遍历

树的存储

对于我们存储一棵树,我们大体上有三种方法:数组,结构体,邻接表。同时这几种方法,各有各的利弊
但是一定要注意的是,数组存树只能存二叉树

数组

数组存树就比较好理解了,就是通过对满二叉树通过对每一个节点从一开始逐层标号存储图,对于每一个根节点来说,他的左子树序列号为 2 ∗ n 2*n 2n,而他的右子树序列号为 2 ∗ n + 1 2*n+1 2n+1,这样,通过根节点的位置,就能很快找出整个二叉树来
但是对于非满二叉树来说,每个节点的序号对于这个树的满二叉树的编号是一样的,也就是说对于只有右子树且只需要存4个点的二叉树我们需要开大小为15的数组,造成了极大的空间浪费,所以数组存树通常用于满二叉树或近满二叉树的情况下才会使用。

结构体

结构体存树一共有两种方法:通过存每个点根节点或存每个点子节点。

存根节点

存根节点可以很快的从任意一个子节点向上查询完整个二叉树,但是从根节点向下遍历确十分的难。

存子节点

存子节点与存根节点相反,可以很快的从任意一个根节点向下遍历完整个二叉树,但是对于从子节点查询根节点很麻烦。

但值得注意的是,存根节点和存子节点的方法可以共存,理论上可以起到相辅相成的作用,但是会增加代码量和不确定因素;

邻接表

邻接表可以说是很常用的存储方式,无论是存图还是存树都是很管用的。对于邻接表存树,就需要用到链式前向星来存,具体存储方式可以查看我第一篇文章,再此就不多叙述了

树的遍历

对于遍历一棵树,和遍历图一样,最常用的就是深度优先搜索和广度优先搜索,常见题型的思路大概为用链式前向星存下树,之后根据题目用广搜或深搜遍历树,并找出题目所要求的值,也有些极端点的题,存储方法或许会要求使用其他方法。

总结

以上即为树的存储目前所想到的知识点,树本质上也是种图,所以一些在《图的存储》文章中提到的就没有重复说明,日后将会继续完善,如果有错误的地方请指出来,会及时改正

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值