我正在尝试在R
中实现三元搜索树。
这是我试图实现的逻辑:
通过将树的每个级别指定为现有层之后的下一个3^somepower
单元格,将向量“分层”。因此,第1层将是第一个单元,第2层将是单元2-4,第3层将是单元5-13,第4层将是单元14-40,第5层将是单元41-122,依此类推。 / p>
我希望我的代码执行以下操作:
1)取一个向量,并在树中插入一个对象obj
。实际上,obj
将是一个数字。
2)如果我想要进入的插槽已满,请按照规则跳转到下一层:
2a)如果obj
是<
而不是被占用的单元格,请在下一个级别的左侧单元格中,在“正下方”的三个单元格块中。
2b)如果obj
为==
被占用的单元格,则向下到“正下方”的三单元块的中心单元格。
2c)如果'obj'是>
被占用的细胞,则向下到“正下方”的三细胞块的最右边的细胞。
如果我输入数字34,42,15,24,16, 34,52,32,42,19,21,16,54,60,55
,我画了一个我想要输出的图表。我包含了某些东西的代码,但我不确切地知道它在做什么。我只是知道它没有做我想做的事情。
感谢您的帮助。
期望的输出:
我的代码:
put<-function(obj, Tree,pow=0,offset=1,arity=3)
{
level<-arity^pow
if (is.na(Tree[level])){
Tree[level+offset-1]<-obj
return(Tree)
} else {
if (obj<Tree[level]) {
put(obj,Tree,pow+1,offset=0)
} else {
if (obj == Tree[level]){
put(obj,Tree,pow+1,offset=1)
} else {
if (obj > Tree[level]){
put(obj,Tree,pow+1,offset=2)
}}}}
}
BeforeTree<-c(34,42,15,24,16,
34,52,32,42,19,21,16,54,60,55)
Tree<-NA
for (idx in 1:(length(BeforeTree)))
{Tree<-put(BeforeTree[idx],Tree)}
(Tree)