高度优先左高树(HBLT) - C语言

本文介绍了左高树的概念,其中节点分为内部节点和外部节点,重点阐述了s(x)的计算方法。高度优先左高树(HBLT)要求任意内部节点的左孩子s(x)大于等于右孩子。最大HBLT是同时是最大树的HBLT。文章通过MaxHBLT_Main.c展示了最大HBLT的C语言实现,关键在于hblt_merge()函数。
摘要由CSDN通过智能技术生成

相关概念:

左高树(leftist tree)将树中的节点分为两类:

外部节点:用于代替树中的空子树;其余节点均叫做内部节点.内部节点就是我们所能看到的树中的每个真实节点,如果某个节点的左子树为空,那它的这个左子树就是外部节点.外部节点的引入,其实主要是为了下面s(x)这个概念的计算,并不具备其它实际意义.

s(x)为节点x至它的子树的外部节点的所有路径中最短的那一条.比如根节点30,左子树为20(内部节点),右子树为空(外部节点),则根节点到左子树的路径为:30 -> 20 -> 外部节点,路径为2;根节点到右子树的路径为:30->外部节点,路径为1.因此,根节点30的s(x)=1.

根据上面s(x)的定义可知,若x是外部节点,则s(x)=0;若x为内部节点,则s(x)=min{s(left_child), s(right_child)} + 1.

高度优先左高树(Height-Biased Leftist Tree, HBLT):当且仅当一棵二叉树的任何一个内部,其左孩子的s(x)值大于等于右孩子的s(x)值.

最大HBLT,即同时又是最大树(每个节点的值都大于或等于其子节点值的树)的HBLT.

MaxHBLT_Main.c即是一个最大HBLT的实现,核心函数就是hblt_merge(),即将两个最大HBLT合并成一个HBLT,其中就用到了s(x)这个概念.

运行结果:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值