Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何创建左规范二叉搜索树?_Algorithm_Search_Data Structures_Binary Search Tree - Fatal编程技术网

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

Algorithm 如何创建左规范二叉搜索树?,algorithm,search,data-structures,binary-search-tree,Algorithm,Search,Data Structures,Binary Search Tree,我正在研究数据结构,我必须建立左正则二叉搜索树,也称为左平衡二叉搜索树 例如: 我不知道从哪里开始,如何开始建造那棵树。谁能告诉我怎么做吗。也许在一个简单的例子中,元素从1,2,3,。。。到10。在实践中,我们首先找到两个M=2^n的最大幂,这样M≤ N,其中N是我们使用的元素数 希望插入。这棵树能容纳我− 1所有级别上的元素,不包括最底层。最底层本身将包含M个元素,这些元素被划分为左子树中的M/2和右子树中的M/2 我们计算余数R=N− (M)− 1) 然后如果R≤ M/2 LT = (M

我正在研究数据结构,我必须建立左正则二叉搜索树,也称为左平衡二叉搜索树

例如:


我不知道从哪里开始,如何开始建造那棵树。谁能告诉我怎么做吗。也许在一个简单的例子中,元素从1,2,3,。。。到10。

在实践中,我们首先找到两个M=2^n的最大幂,这样M≤ N,其中N是我们使用的元素数 希望插入。这棵树能容纳我− 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成为右树。我们递归计算整个树。

资料来源:

您的示例:

有元素: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
So 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
N = 2
M = 2^n where M ≤ N
M = 2
R = 3 - (2 - 1) = 2
So 3≤ M/2无效

LT = (M - 2)/2 + M/2
LT = 3
RT = (M - 2)/2 + R - M/2
RT = 2
LT = (M - 2)/2 + M/2
LT = 1
RT = (M - 2)/2 + R - M/2
RT = 1
在左子树中有元素1、2、3。在右边的子树中,元素5、6和4是中位数

我们把4画成7岁的左孩子


然后我们对元素1,2,3,4,5,6的LT元素1,2,3做同样的处理

N = 6
M = 2^n where M ≤ N
M = 4
R = 6 - (4 - 1) = 3
N = 2
M = 2^n where M ≤ N
M = 2
R = 3 - (2 - 1) = 2
二氧化硫≤ M/2无效

LT = (M - 2)/2 + M/2
LT = 3
RT = (M - 2)/2 + R - M/2
RT = 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的左孩子

然后我们对包含元素8、9、10的RT(根节点7的右子节点)执行相同的操作,其中9是中间值,8是9的左子节点,10是9的右子节点

最后一棵树应该是这样的


什么是“左正则”二叉搜索树?我所知道的定义并不平衡此树-根的左子树没有右子树,高度为2Left canonical的左子树与左平衡的左子树相同。我认为左平衡二叉搜索树是哈夫曼树(哈夫曼编码)的一种。@Chris我已经更新了我的问题。仍然不太平衡。请参见:即您需要为Root->right->right添加一个额外的节点。我会复习你的问题