Java-Trees,返回arrayList中的最大节点数

Java-Trees,返回arrayList中的最大节点数,java,Java,我被困在我大学的一个关于树木的实验室里,希望有人能帮我解决这个问题。他们要求我们编写一个名为maxDegree()的方法,该方法返回任何节点中最大数量的子节点。我正在努力找出如何实现这一点,如果有人可以看看我目前的方法,并指出我在正确的方向,这将是伟大的 示例树图- packageweek10; 导入java.util.*; /** *通用树递归实现的框架。 * *@作者迈克尔·阿尔伯特 *@param存储在树中的值的类型。 */ 公共类树{ 私人T值; 私人名单儿童; 公共树(T根值,列出子

我被困在我大学的一个关于树木的实验室里,希望有人能帮我解决这个问题。他们要求我们编写一个名为maxDegree()的方法,该方法返回任何节点中最大数量的子节点。我正在努力找出如何实现这一点,如果有人可以看看我目前的方法,并指出我在正确的方向,这将是伟大的

示例树图-

packageweek10;
导入java.util.*;
/**
*通用树递归实现的框架。
* 
*@作者迈克尔·阿尔伯特
*@param存储在树中的值的类型。
*/
公共类树{
私人T值;
私人名单儿童;
公共树(T根值,列出子级){
this.rootValue=rootValue;
这个。孩子=孩子;
}
公共树(T根值){
这个(rootValue,new ArrayList());
}
公共整数大小(){
整数计数=1;
for(树子:子对象){
count+=child.size();
}
返回计数;
}
//我坚持的方法
公共整数maxDegree(){
int largestNode=0;
for(树子:子对象){
child.maxDegree();
if(child.size()>largestNode){
System.out.println(“test”+children.size());
largestNode=child.size();
}
}
返回最大节点;
}
公共无效添加(树子级){
添加(child);
}
公共树查找(T值){
if(rootValue.equals(value)){
归还这个;
}
for(树子:子对象){
树匹配=child.find(值);
如果(匹配!=null){
复赛;
}
}
返回null;
}
公开名单邮购(){
//实现这个方法
返回新的ArrayList();
}
公共字符串toString(){
if(children.isEmpty()){
返回rootValue.toString();
}
返回rootValue.toString()+“”+children.toString();
}
公共字符串ToIndendedString(){
//实现这个方法
返回“尚未实现!”;
}
/**用于测试的助手方法(由main使用)。在树中搜索
*指定目标,并将空格分隔的子对象添加到
*匹配目标的树(如果有)。
*
*@param将要搜索的根值作为目标。
*@param children以空格分隔的要添加的子项列表
*指向其值与目标匹配的树。
*/
私有静态void addChildren(字符串目标,字符串子项){
Tree parent=Tree.find(目标);
如果(父项!=null){
for(字符串子项:children.split(“”){
添加(新树(子树));
}
}
}
/**用于测试的树实例*/
私有静态树;
/**
*程序的入口点(用于测试)。
*
*未使用@param args命令行参数。
*/
公共静态void main(字符串[]args){
System.out.println(“创建树\n----------------”);
树=新树(“食物”);
System.out.print(树+“\n大小:“+tree.size());
System.out.println(“,max degree:+tree.maxDegree());
System.out.println(“\n添加子项\n----------------”;
儿童(“食物”、“肉类水果蔬菜”);
System.out.print(树+“\n大小:“+tree.size());
System.out.println(“,max degree:+tree.maxDegree());
System.out.println(“\n添加更深层次的子项\n---------------------”);
addChildren(“肉”、“鸡肉牛肉鱼”);
addChildren(“鱼”,“鲑鱼鳕鱼金枪鱼鲨鱼”);
儿童(“蔬菜”、“卷心菜”);
System.out.print(树+“\n大小:“+tree.size());
System.out.println(“,max degree:+tree.maxDegree());
System.out.println(“\nPostorder\n-----------”);
System.out.println(tree.postOrder());
System.out.println(“\n插入的字符串\n---------------------------”;
System.out.print(tree.toindendedstring());
}
}
这将起作用:

public int maxDegree()
{
    // Get the number of immediate children
    int numChildren = this.children.size();

    // Find the max of all children
    int maxOfChildren = 0;
    for (Tree<T> child : children)
    {
        maxOfChildren = Math.max(maxOfChildren, child.maxDegree());
    }

    // return the greater of immediate child or max of children
    return Math.max(numChildren, maxOfChildren);
}
public int maxDegree()
{
//获取直系子女的数量
int numChildren=this.children.size();
//找到所有孩子的最大值
int-maxOfChildren=0;
for(树子:子对象)
{
maxOfChildren=Math.max(maxOfChildren,child.maxDegree());
}
//返回直接子级或最大子级中的较大值
返回Math.max(numChildren、maxOfChildren);
}
示例树的说明

  • 在食物节点上调用最大度(它有3个直接子节点)
  • 我们在所有食物(肉、水果、蔬菜)的孩子中循环
  • 在meat节点上调用Max degree(它有3个直接子节点)
  • 我们对所有肉类(鸡肉、牛肉、鱼)的孩子进行循环
  • 在鸡节点上调用最大度(它有0个直接子节点)
  • 鸡的最高等级是0
  • 在beef节点上调用Max degree(它有0个直接子节点)
  • 牛肉的最高等级是0
  • 在fish节点上调用Max degree(它有4个直接子节点)
  • 我们在所有鱼类(鲑鱼、鳕鱼、金枪鱼、鲨鱼)的后代中循环
  • 在salmon节点上调用Max degree(它有0个直接子节点)
  • 鲑鱼的最高等级是0
  • 在cod节点上调用Max degree(它有0个直接子节点)
  • cod最大值为0
  • 在tuna节点上调用最大度(它有0个直接子节点)
  • 金枪鱼的最高等级是0
  • 在shark节点上调用最大度(它有0个直接子节点)
  • 鲨鱼的最大等级为0
  • 鱼的所有子对象的最大度数为0
  • 鱼的最大等级是4
  • 所有肉类的最大等级为4
  • 肉的最高等级是4
  • 水果上叫最大度
    public int maxDegree()
    {
        // Get the number of immediate children
        int numChildren = this.children.size();
    
        // Find the max of all children
        int maxOfChildren = 0;
        for (Tree<T> child : children)
        {
            maxOfChildren = Math.max(maxOfChildren, child.maxDegree());
        }
    
        // return the greater of immediate child or max of children
        return Math.max(numChildren, maxOfChildren);
    }