二进制搜索树递归到迭代版本

时间:2014-04-16 20:05:01

标签: java eclipse algorithm binary-search-tree

我目前有二进制搜索树的插入方法的递归版本。我现在试图获得相同的结果,但我希望它是一个迭代版本。我觉得我非常接近,如果有人可以给我一些建议,我还需要做些什么才能让这个工作起来,因为我在这一点上很难过。

递归:

public void insert(E item)
  {
    root = insert(root, item, 0); 
  }

  private BNode insert(BNode ptr, E item, int d)
  {
    if (ptr == null) {
     ++Size;
     return new BNode(item, null, null, d);
  }


   int diff = item.compareTo(ptr.data);
   if (diff < 0)
   ptr.left = insert(ptr.left, item, d+1);
   else if (diff > 0)
   ptr.right = insert(ptr.right, item, d+1);
   else
   ; // duplicates;

   return ptr; 
 }

My Current for Iterative version:

public void insert(E item)
{
  BNode ptr = root;
  int d = 0; // set the initial depth

  if(ptr == null) {
     ++Size;
     root = new BNode(item, null, null, d); 
   } 

   while(ptr != null) {
      int diff = item.compareTo(ptr.data);
      if(diff < 0) 
         ptr.left = new BNode(item, null, null, d+1); // *EDIT
      else if (diff > 0){
         ptr.right = new BNode(item, null, null, d+1);  //*EDIT
      }
      else
       break;  // no duplicates

      }
      ++Size;
   }
}

1 个答案:

答案 0 :(得分:0)

  

@Cyber​​neticTwerkGuruOrc当我运行测试时,我的版本将无法编译   在上面。这些项目未插入树中。我迷失了   问题是什么?

你发布了矛盾的观点。如果它无法编译,那么你是如何运行它的?我假设你可以编译它。

除了根节点之外,您实际上从未添加过新节点。你想改变你的while循环。一旦找到空点,就应该将新节点放在那里。然后打破循环。

   while(ptr != null) {
      int diff = item.compareTo(ptr.data);
      if(diff < 0) 
         ptr = ptr.left;
      else{
         ptr = ptr.right;
      }

      //update this code here
      if(ptr == null){
          ptr = new BNode(item, null, null, d);
          ++Size;
          break;
      }
   }