java - 二叉搜索树的最大高度
问题描述
所以我需要找到二叉树的最大高度,但由于某种原因,下面提供的代码的结果偏离了 1。例如,如果最大高度为 3,则以下代码将给我 2。如果最大高度为 4结果将是 3。我不知道为什么?计算最大高度时不考虑根,因此我将 leftCounter 和 rightCounter 设置为 0。有什么想法吗?
public int getMaxHeight(BST.TreeNode<E> n) {
if(n == null) {
return 0;
}
int leftCounter = 0;
int rightCounter = 0;
if(n.left != null) {
leftCounter = getMaxHeight(n.left) +1 ;
}
if(n.right != null) {
rightCounter = getMaxHeight(n.right) +1 ;
}
if(leftCounter > rightCounter) {
return leftCounter;
}
else
return rightCounter;
}
这个二叉树的最大高度应该是3:因为元素 5,9,11。根不计入最大高度。
15
_____|____
10 21
___|___ __|__
9 14 16 24
|__
25
解决方案
您的代码实际上返回了正确的值;只是你误解了树的高度是什么意思。高度是从根到叶的最长路径上的边数,而不是路径上的节点数。所以下面的树
3
_____|____
4 5
___|___ __|__
6 7 8 9
高度为 2,而不是 3。您要查找的是树中的级别数,而不是高度。
public int getNumberOfLevels(BST.TreeNode<E> n) {
if(n == null) return 0;
int left = getNumberOfLevels(n.left);
int right = getNumberOfLevels(n.right);
return 1 + Math.max(left, right);
}
推荐阅读
- javascript - 当我单击按钮执行功能时,Angular 8 HTTP POST 没有任何反应
- spring - Spring Security“记住我”cookie在浏览器关闭事件中被删除
- ios - 推送通知不适用于带有 APNS 的 iOS 和解析云功能(云功能与 android 一起工作......)
- c# - 如何使用依赖注入模式在 .Net Core 中的两个 IHostBuilder 实例之间共享服务?
- java - getSubimage 让我期待 null
- excel - 未定义用户定义类型 - 来自自定义类模块
- python - 如何从 Pandas 数据框中检索在其中一列末尾包含特定值的记录序列?
- jquery - Jquery 数据表搜索和显示条目在我的表的左侧
- angular - 离子 4 @mauron85/cordova-plugin-background-geolocation
- updates - 使用 Dexie,如何从表中所有对象的数组字段中删除一个值?