algorithm – 如何创建左规范二叉搜索树?

我正在研究数据结构,我必须构建左规范二进制搜索树,也称为左平衡二叉搜索树.

例:

《algorithm – 如何创建左规范二叉搜索树?》

我不知道在哪里以及如何开始构建那棵树.任何人都可以告诉我如何做到这一点.也许在简单的例子中,元素从1,2,3,……到10.

最佳答案 在实践中,我们首先找到两个M = 2 ^ n的最大功率,使得M≤N,其中N是我们的元素数

希望插入.树将在除最底部之外的所有级别上保持M-1个元素.最底层自身将保持M个元素在左子树中分为M / 2,在右子树中分为M / 2.

我们计算余数R = N – (M – 1),然后计算R≤M/ 2

LT = (M − 2)/2 + R
RT = (M − 2)/2

否则如果R> M / 2

LT = (M − 2)/2 + M/2
RT = (M − 2)/2 + R − M/2

例:

在示例(2,3,7,9,11)中,我们具有N = 5个元素并且M = 4,因此R = 5-(4-1)= 2.因此LT为3且RT为1.因此,9成为用作根节点的中值元素,2,3,7被置于左子树中,而11成为右树.我们递归计算整个树.
《algorithm – 如何创建左规范二叉搜索树?》

资源:
http://www2.imm.dtu.dk/pubdb/views/edoc_download.php/2535/pdf/imm2535.pdf

你的例子:

你有元素:1,2,3,4,5,6,7,8,9,10.

N = 10
M = 2^n where M ≤ N
M = 8
R = 10 - (8 - 1) = 3

所以3≤M/ 2是有效的.

LT = (M - 2)/2 + R
LR = 6
RT = (M - 2)/2
RT = 3

所以在左子树中有元素1,2,3,4,5,6.在右子树中元素8,9,10和7是中值.

我们绘制根节点7.

我们对LT元素1,2,3,4,5,6进行相同的操作.

N = 6
M = 2^n where M ≤ N
M = 4
R = 6 - (4 - 1) = 3

所以3≤M/ 2无效.

LT = (M - 2)/2 + M/2
LT = 3
RT = (M - 2)/2 + R - M/2
RT = 2

在左子树中有元素1,2,3.在右子树中元素5,6和4是中值.

我们画7作为7的左子.

我们对元素1,2,3,4,5,6的LT元素1,2,3进行相同的处理.

N = 2
M = 2^n where M ≤ N
M = 2
R = 3 - (2 - 1) = 2

所以2≤M/ 2无效.

LT = (M - 2)/2 + M/2
LT = 1
RT = (M - 2)/2 + R - M/2
RT = 1

在左子树中有元素1.在右子树中有元素3,2是中值.

我们画2作为4的左孩子.

然后逻辑上,1是2的孩子,3是2的右孩子.

通过规则,如果只有两个元素,则右元素是中位数(根节点).所以6岁是4岁的孩子,5岁是6岁的孩子.

然后我们对RT(根节点7的右子节点)进行相同的操作,其中元素为8,9,10,其中9为中位数,8为子节点9,10为右子节9.

最终的树应该是这样的.

《algorithm – 如何创建左规范二叉搜索树?》

点赞