【发布时间】:2020-03-18 03:03:32
【问题描述】:
下面的代码测试二叉树是否平衡。我被告知它的运行时间是 O(n log n)。
据我了解...
getHeight()每个节点都访问一次,所以是O(n)。isBalanced()调用getHeight().. 然后递归
如果在所有n个节点上调用isBalanced(),它调用getHeight()是O(n),为什么复杂度不是O(n²)?
int getHeight(TreeNode root) {
if (root == null) return -1;
return Math.max(getHeight(root.left), getHeight(root.right)) + 1;
}
boolean isBalanced(TreeNode root) {
if (root == null) return true;
int heightDiff = getHeight(root.left) - getHeight(root.right);
if (Math.abs(heightDiff) > 1)
return false;
else
return isBalanced(root.left) && isBalanced(root.right);
}
【问题讨论】:
-
你说的是真的,但不完整。递归多少次?
-
递归 isBalanced() 不会访问树中的每个节点吗?
-
请遍历代码看看
-
在最坏的情况下,当树平衡时,每个节点都会调用递归方法。
标签: java time-complexity binary-tree