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

标签 java binary-tree generic-programming

我正在创建一个方法来计算方法参数值的频率。我创建了一个二叉树并将值放入其中,我现在尝试计算等于参数的所有值。 问题是我陷入了无限循环,任何人都可以明白为什么:

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;
    }

最佳答案

当您找到匹配的值时,您会增加计数器,但不会更改 p,因此此后您将永远停留在同一个节点上。

树可以包含多个值实例的任何解决方案都必须是递归的。只需绘制一棵树,其中包含某个特定值的 6 个实例,然后遍历您的代码。此时您必须查看两个子树,因此递归是轻松完成此操作的唯一方法(或者,我想您也可以使用父指针堆栈,但递归太多了清洁剂)。

关于java - 计算二叉树中通用对象的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20082610/

相关文章:

c++ - 部分专用类上的标记调度与静态方法

rust - 有什么方法可以递归地展平元组吗?

scala - 类型模式匹配为什么变量是必须的

java - eclipse 错误导出插件

java - Ada 中的未命名记录

Java流按2个字段排序

c++ - 在伪二叉树中为每个 child 设置 sibling

performance - 为什么红黑树比 2-3 棵树更好?

java - 如何使用多个排序标准对 ArrayList 进行排序?

java - 二叉树节点 - 哪条路?