我很难完成这个算法来找到有多个孩子(不是二进制)的树的高度。
任何人都知道这出错了吗?
private int getHeight(Node<T> root, int height, int result){
if (root.getChildren().size()==0) {
return height;
}
height++;
//Iterate every child
for (Node<T> childNode : root.getChildren()) {
//Get the height again
height =getHeight(childNode, height, result);
//Update if new high result
if (height>result) {
result = height;
}
height = 0;
}
//Return highest point
return result;
}
答案 0 :(得分:1)
通过添加高度和结果参数,您将变得更加困难。
在该功能中,找到每个孩子的身高。保持最大。返回1 +最大的高度。
像这样的Sometrhing(未经测试,未编译):
private int getHeight(Node<T> root){
int max = 0;
for (Node<T> childNode : root.getChildren()) {
int height = getHeight(childNode);
if (height > max)
max = height;
}
return max + 1;
}
答案 1 :(得分:1)
计算高度的方式非常尴尬,有很多地方可能出现错误,比如你在高处加一个然后得到孩子的高度。
我建议做一个更简单的递归函数,类似于你正在做的函数。
首先,您可以删除第二个和第三个参数,然后您可以更改代码以查找更像这样的内容:
private int getHeight(Node<T> root){
if (root.getChildren().size()==0) {
return 1;
}
int height;
//Iterate every child
for (Node<T> childNode : root.getChildren()) {
//Get the height again
int childHeight = getHeight(childNode);
//Update if new high result
if (childHeight>height) {
height = childHeight;
}
}
//Return highest point
return height + 1;
}
如果节点没有子节点,则返回1。否则,它获取所有子项的最大高度并返回该数字加1。