java - 如何计算二叉树中 "only child"节点的数量?

标签 java

注意:这是与作业相关的,但我不会这样标记它,因为“作业”标签被标记为已过时(?)

使用以下实现二叉树的类...

class TreeNode
{
  private Object value; 
  private TreeNode left, right;

   public TreeNode(Object initValue)
  { 
     value = initValue; 
     left = null; 
     right = null; 
  }

   public TreeNode(Object initValue, TreeNode initLeft, TreeNode initRight)
  { 
     value = initValue; 
     left = initLeft; 
     right = initRight; 
  }

   public Object getValue()
  { 
     return value; 
  }

   public TreeNode getLeft() 
  { 
     return left; 
  }

   public TreeNode getRight() 
  { 
     return right; 
  }

   public void setValue(Object theNewValue) 
  { 
     value = theNewValue; 
  }

   public void setLeft(TreeNode theNewLeft) 
  { 
     left = theNewLeft;
  }

   public void setRight(TreeNode theNewRight)
  { 
     right = theNewRight;
  }

}

我需要计算二叉树中“独生子”节点的数量,这被定义为不具有源自其父节点的另一个节点的节点。

这是我到目前为止所拥有的:

public static int countOnlys(TreeNode t)
  {
     if(t == null)
         return 0;
     if(isAnOnlyChild(t))
         return 1;
     return countOnlys(t.getLeft()) + countOnlys(t.getRight());
  }

我不知道如何实现boolean方法isAnOnlyChild(TreeNode t)

有人可以帮我吗?

最佳答案

您已经非常接近并且遍历看起来不错,但是在您的 Treenode 中,您的子节点与其父节点之间没有链接。因此,您无法从左 child 中判断是否存在 sibling (右 child )。

您可以有一个父 Treenode(以及左节点和右节点),这样您就可以检查给定节点的父节点有多少个子节点。或者如 ajp15243 建议的那样,使用一种方法来检查给定节点有多少个子节点。

后者的一些伪代码:

//we still need to check if that only child has its own children
if hasOnlyChild(t) 
      return 1 + checkOnlys(left) + checkOnlys(right)
else 
      return checkOnlys(left) + checkOnlys(right)

关于java - 如何计算二叉树中 "only child"节点的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14719324/

相关文章:

java - 如何使蓝牙服务可公开发现?

javascript - 如何在本地主机服务器上使用 javascript ajax 调用 java 类函数

java - 是什么导致了 java.lang.ArrayIndexOutOfBoundsException 以及如何防止它?

java - 类型集合的 toArray 方法未定义

java - 如何保持 JavaFX Spinner 值的比率

java程序使操作系统难以格式化可移动磁盘

java - Hadoop日志文件分析

java - 两个不同的模型属性,具有相同的名称,每个传递给不同的 View ,但在同一个 Controller 中

java - 如何以 sbt 汇编后可访问的方式打开我的资源目录中的文件?

java - 使 AsyncTask(或服务)不可终止(或接近它的东西)