Я пытался получить высоту корня из 2 деревьев (тот же корень). Я только начал работать с деревьями, и этот способ обхода без левых или правых ссылок вызывает у меня некоторые трудности.
Я использовал рекурсию, чтобы добраться до конечных узлов, затем попытался вычислить высоту с помощью getParent () и счетчика.
public int height(){
//code is a little messy but the first number is the height of the root
System.out.print("Height: ");
return height(root);
}
private int height(TNode tn){
if (tn == null) return 0;
int counter = 0;
//recursive call to get to the leaf nodes
for (TNode cn: tn.getChildren()){
height(cn);
}//while at the leaf nodes, count the parent nodes of the leaf nodes
while(tn.getParent() != null){ //if there's a parent
tn = tn.getParent(); //tn becomes its parent
counter+=1;
if(tn.getParent() == null && tn == root){
counter+=1;
}
}
System.out.print(counter + " ");
return counter;
}
Высоты2 дерева - 4 и 2. Коды дают
Высота: 4 4 4 3 3 4 4 4 3 2 3 3 3 2 2 0
Высота: 2 2 2 0
Я пытался использовать стеки и массивы, чтобы изолировать 4 и 2 в начале, но безрезультатно. Может быть, проблема очевидна, но, возможно, мое понимание обхода дерева таким образом немного отсутствует. Любые предложения будут оценены.