我正在尝试在R
.
这是我试图实现的逻辑:
3^somepower
通过将树的每一层指定为现有层之后的下一个单元,向量将被“分层” 。因此,第 1 层将是第一个单元,第 2 层将是第 2-4 个单元,第 3 层将是第 5-13 个单元,第 4 层将是第 14-40 个单元,第 5 层将是第 41-122 个单元,依此类推。
我希望我的代码执行以下操作:
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)