0

我正在尝试在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)
4

0 回答 0