计算二叉树中通用对象的频率

时间:2013-11-19 21:37:58

标签: java binary-tree generic-programming

我创建了一种方法来计算作为methods参数的值的频率。我创建了一个二叉树并将值放入其中,我现在尝试计算所有等于参数的值。 问题是我得到一个无限循环,任何人都可以看到原因:

public int counter(T value)
  {
     if (value == null) return 0;
      Node<T> p = root, q = null; // q is the parent of p
      int values = 0;


    while (p != null)                           // checks p
    {
      int cmp = comp.compare(p.value,value);// compares

      if(p.value.equals(value))
      {
          values++;
      }

      if (cmp < 0) { q = p; p = p.left; }      // goes left in the tree
      else if (cmp > 0) { q = p; p = p.rigth; }  goes right in the tree


     if ( p == null) return values;
        }


      return 0; // if no values found in the tree 
  }

构造

   private Node(T value, Node<T> l, Node<T> r) 
    {
      this.value = value;
      left = l; right = r;
    }

2 个答案:

答案 0 :(得分:1)

当你找到一个匹配的值时,你会增加计数器,但不会改变p,所以你之后会永远停留在同一个节点上。

树可以包含多个值实例的任何解决方案都必须是递归的。只需绘制一个树,例如6个特定值的实例,然后浏览代码。你必须在那一点看两个子树,所以递归是唯一的方法来实现这一点(或者,你可以使用父指针堆栈,我想,但递归是这么多清洁器)。

答案 1 :(得分:0)

感谢您的回答!我不擅长树或递归方法,但这是我的尝试,我得到堆栈溢出所以这又是一个无限循环。但我只是不知道如何解决这个问题。

 public int counter(T value)
  {
     if (value == null) return 0;
      Node<T> p = root, q = null;
      int countervalues = 0;

     if(p.value.equals(value))
      {
          countervalues++;
      }


  if(p.left!=null) p = p.left; counter(value);


  if(p.right!=null) counter(value);



     if(p.left == null && p.left == null)
         return countervalues;



      return 0;
  }