public int getHeight() {
    return heightFinder(root, 0);
}


这是一种递归方法,它可以实际计算出高度,将一条路径的计数与另一条路径的计数进行比较,然后从头开始选择较高的计数。

public int heightFinder(BTNode roo, int count) {
    if(roo == null) {
        return count--;
    }
    else
        return (heightFinder(roo.getLeft(), count++) > heightFinder(roo.getRight(), count++)) ?
                heightFinder(roo.getLeft(), count++) : heightFinder(roo.getRight(), count++);
}

最佳答案

问题是此代码:

heightFinder(roo.getLeft(), count++) > heightFinder(roo.getRight(), count++)) ?
heightFinder(roo.getLeft(), count++) : heightFinder(roo.getRight(), count++)


对于每个heightFinder调用,您执行count++,这将增加count并返回新值。

假设count0开头(与第一次调用相同),您将把1传递给第一个heightFinder调用,将2传递给第二个heightFinder调用,然后将3传递给第三次heightFinder调用。

另外,您应该真正记住前两个调用的值,而不是重新执行“ winning”分支。因为否则,您将遍历整棵树没有任何实际好处,但是那不会影响正确性,只会影响性能。

07-24 13:45