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添加一个额外的节点。我会复习你的问题