Java 获取具有多个子树的树的高度
我很难完成这个算法来计算一棵有多个子树(不是二进制树)的高度 有人知道哪里出了问题吗Java 获取具有多个子树的树的高度,java,Java,我很难完成这个算法来计算一棵有多个子树(不是二进制树)的高度 有人知道哪里出了问题吗 private int getHeight(Node<T> root, int height, int result){ if (root.getChildren().size()==0) { return height; } height++; //Iterate every child f
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;
}
private int-getHeight(节点根、int-height、int-result){
if(root.getChildren().size()==0){
返回高度;
}
高度++;
//迭代每个孩子
对于(Node-childNode:root.getChildren()){
//重新获得高度
高度=getHeight(子节点、高度、结果);
//如果出现新的高结果,则更新
如果(高度>结果){
结果=高度;
}
高度=0;
}
//返回最高点
返回结果;
}
通过添加“高度”和“结果”参数,您的操作变得更加困难
在函数中,找到每个孩子的身高。保留最大的。返回最大值的1+高度
像这样的东西(未经测试,未编译):
private int getHeight(节点根){
int max=0;
对于(Node-childNode:root.getChildren()){
int height=getHeight(childNode);
如果(高度>最大值)
最大值=高度;
}
返回最大值+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;
}
private int getHeight(节点根){
if(root.getChildren().size()==0){
返回1;
}
内部高度;
//迭代每个孩子
对于(Node-childNode:root.getChildren()){
//重新获得高度
int childHeight=getHeight(childNode);
//如果出现新的高结果,则更新
如果(儿童身高>身高){
身高=儿童身高;
}
}
//返回最高点
返回高度+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;
}