数据结构与算法之树(上)

树的表示

数据结构网课树这一章开头树与树的表示以二分讲起,第一次二分选取的mid便是一棵二叉树的根,往左即为左子树,往右则为右子树,节点所在深度即为二分查找至该节点时查找的次数,最大查找次数为各层节点数乘以各层深度再相加(就感觉这个很巧妙,算法之间还是有联系的)。

之后看树的存储结构,在计算机中数据的存储有两种结构顺序存储和链式存储,顺序存储结构显然是不行的,而链式存储结构也是有缺点的:由于链式存储结构中的节点需含有子结点的引用或指针,但在树中子节点的不确定性导致无法固定具体节点中有几个指针,当然,你直接大家都给满,给一样多的确可以,但那样会因为申请大量的空间导致内存的浪费。最终我们选取了一种使用数组+链表结合的方式来表示树(见双亲孩子表示法👇)。

树的存储结构

双亲表示法

假设以一组连续空间存储树的结点,同时在每个结点中,附设一个指示器指示其双亲结点在数组中位置。即每个结点除了知道自己是谁以外,还要知道它的双亲在哪里。它的结点结构表示为
在这里插入图片描述
其中data是数据域,存储结点的数据信息。而parent是指针域,存储该结点的双亲的数组下标。

这样的结构定义,我们就可以来实现双亲表示法了。由于根结点是没有双亲的,所以我们约定根结点的位置域设置为-1,这也就意味着,我们所有的结点都存有它双亲的位置。

这样的存储结构,我们可以根据结点的parent指针很容易找到它的双亲结点,所用的时间复杂度为O(1),直到parent为-1时,表示找到树结点的根。可如果我们要知道结点的孩子是什么,对不起,请遍历整个结构才行。

双亲孩子表示法:
在这里插入图片描述

遍历

在这里插入图片描述
先序遍历:先访问根节点,然后先序遍历左子树,然后先序遍历又子树。上图先序遍历的结果:A->B->D->E->C->F

后序遍历:按照从左到右先叶子结点后节点,最后根节点的方式的方式访问。上图后序遍历的结果:D->E->B->F->C->A。

中序遍历:从根节点开始(注意不是先访问根节点),中序遍历根节点的左子树,然后根节点然后中序遍历根节点的右子树。上图中序遍历的结果:D->B->E->A->F->C。

先写到这,还有中和下哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值