我被困在我的一个关于树木的大学实验室,并希望有人可以帮我解决这个问题。他们要求我们编写一个名为maxDegree()的方法,该方法返回任何节点的最大子节点数。我正在努力弄清楚如何实现这一点,如果有人能够看到我当前的方法并指出我正确的方向,这将是伟大的!
示例树图 - http://imgur.com/eGqDpf2l.png
package week10;
import java.util.*;
/**
* Skeleton of the recursive implementation of a general tree.
*
* @author Michael Albert
* @param <T> The type of values stored in the tree.
*/
public class Tree<T> {
private T rootValue;
private List<Tree<T>> children;
public Tree(T rootValue, List<Tree<T>> children) {
this.rootValue = rootValue;
this.children = children;
}
public Tree(T rootValue) {
this(rootValue, new ArrayList<Tree<T>>());
}
public int size() {
int count = 1;
for (Tree<T> child : children) {
count += child.size();
}
return count;
}
//METHOD I AM STUCK ON
public int maxDegree() {
int largestNode = 0;
for (Tree<T> child : children) {
child.maxDegree();
if (child.size() > largestNode) {
System.out.println("test" + children.size());
largestNode = child.size();
}
}
return largestNode;
}
public void add(Tree<T> child) {
children.add(child);
}
public Tree<T> find(T value) {
if (rootValue.equals(value)) {
return this;
}
for (Tree<T> child : children) {
Tree<T> match = child.find(value);
if (match != null) {
return match;
}
}
return null;
}
public List<T> postOrder() {
// implement this method
return new ArrayList<T>();
}
public String toString() {
if (children.isEmpty()) {
return rootValue.toString();
}
return rootValue.toString() + ' ' + children.toString();
}
public String toIndentedString() {
// implement this method
return "Not implemented yet!";
}
/** A helper method for testing (used by main). Searches tree for
* the given target and adds white space separated children to
* the tree matching target if there is one.
*
* @param target the root value to seach for.
* @param children a white space separated list of children to add
* to the tree whose value matches target.
*/
private static void addChildren(String target, String children) {
Tree<String> parent = tree.find(target);
if (parent != null) {
for (String child : children.split(" ")) {
parent.add(new Tree<>(child));
}
}
}
/** A tree instance used for testing. */
private static Tree<String> tree;
/**
* Entry point of the program (used for testing).
*
* @param args command line arguments are not used.
*/
public static void main(String[] args) {
System.out.println("Creating tree\n-------------");
tree = new Tree<>("food");
System.out.print(tree + "\nsize: " + tree.size());
System.out.println(", max degree: " + tree.maxDegree());
System.out.println("\nAdding children\n----------------");
addChildren("food", "meat fruit vegetable");
System.out.print(tree + "\nsize: " + tree.size());
System.out.println(", max degree: " + tree.maxDegree());
System.out.println("\nAdding deeper children\n----------------------");
addChildren("meat", "chicken beef fish");
addChildren("fish", "salmon cod tuna shark");
addChildren("vegetable", "cabbage");
System.out.print(tree + "\nsize: " + tree.size());
System.out.println(", max degree: " + tree.maxDegree());
System.out.println("\nPostorder\n---------");
System.out.println(tree.postOrder());
System.out.println("\nIndented string\n---------------");
System.out.print(tree.toIndentedString());
}
}
答案 0 :(得分:1)
这将有效:
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);
}
示例树的说明