相关概念:
左高树(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)这个概念.
运行结果: