六个问题搞懂数据结构中的树的分支

几个问题:树按如下编号

1.寻找父节点:一个完全k叉树,如果一个节点的编号是i,求它的父节点的编号(如果有父节点的话)

先来看答案 如果是一个结点的孩子结点中的最大结点,那么最大节点编号减去根节点编号除以分支度数就是组数

这个问题搞明白后有利于对树的进一步认知,就拿这个图来说吧,

(图源https://img2020.cnblogs.com/blog/1751378/202005/1751378-20200505121616181-675919960.png)

编号5,5-1  /2=2,这就是父节点的编号了。这是怎么个原理?

减去根结点,然后剩下的就是k的整数倍了。当减去后的结点编号为k的时候,整数倍是1,这就是根结点延申出来的k个结点,因而父节点编号为1

然后,2k呢,第一个根结点延申出来k个,然后第二个结点延申出来k个,所以2k就是编号2的组别,那么一切就都可以解释了。

树就是前置结点不断延伸出后置结点的过程,所以说,第一个结点延申出了k个结点,[2,k+1]就是第一个结点延伸出来的结点,然后这组结点继续延申 2延伸出了[k+2,2k+1],3延伸出了[2k+2,3k+1],依次类推,如果是第Q个父节点,它延申出的组就是[(Q-1)*K+2,Q*K+1]

为了清晰可见和美观,我们把它画成了一棵树的结构。

回到问题原点 父节点的编号是啥, 如果最右边的孩子,就是 i-1/k  如果是最左边的孩子,那么就是 i+(k-1)-1/k  不难推到,这玩意都是在同一个整数范围内的,那就向下取整即可。

那么同样的,我们来看第二个问题

2.编号为P的结点的第i个孩子的编号是什么(如果有孩子)

那么 很显然 同样的,编号p前面的所有前置结点都已经延伸完毕,所以此刻共有结点k(p-1)+1个,那么如果i是第k个孩子,那么编号就是kp+1了,不是的话,那就k(p-1)+1+i了

3.编号为p的结点有右兄弟的条件是什么,其右兄弟的编号是什么?

理解了上面所说了,下面这些题都易如反掌了,很简单,不是最右孩子即可,就是说 p-1/k不是整数即可,编号就是p+1.

4.一棵度为k的树中有n1个度为1的结点,n2个度为2的结点,...,nk的度为k的结点,问该树中有多少个叶子结点。

根据树的定义,除了根结点,每个结点都只有一个前驱结点,每个节点与指向它的分支一一对应,所以除了树根结点之外的所有结点数等于所有结点的分支数即度数。那么这也就是说,树的结点数等于所有结点的度数+1,总结点数为

N1+2n2+3n3+4n4+knk+1;那么叶子节点是啥呢。

度为0的结点数就是叶子结点的数目。所以就是总结点数减去所有度不为0的结点数的综合所以再减去n1,n2,n3,n4,...,nk。

重点概念就是 :结点数等于分支数+1.

5.n个结点的树中,只有度为K的分支结点和度为0的叶子结点。求该树含有的叶子节点数目。

除了树根结点之外的所有结点数等于所有结点的分支数即度数。那么这也就是说,树的结点数等于所有结点的度数+1.

N=1+kNk

如此就得出 n-1/k=Nk,那么叶子结点就是结点总数减去度为K的分支结点数。

6.n个结点的k叉树,能达到的最大深度和最小深度。

最大深度,单支树,深度n

最小深度,满k叉树,深度为 logk(n(k-1)+1)

知识瀚若烟海,学习知识的乐趣在于分享,让我们一起在代码路上越走越远吧

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值