R

时间:2016-12-13 16:38:29

标签: r ternary-search-tree

我正在尝试在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,我画了一个我想要输出的图表。我包含了某些东西的代码,但我不确切地知道它在做什么。我只是知道它没有做我想做的事情。

感谢您的帮助。

期望的输出:

enter image description here

我的代码:

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)

0 个答案:

没有答案