public boolean isBalanced(TreeNode root) {
if (root == null) return true;
int left = getHeight(root.left);
int right = getHeight(root.right);
if (Math.abs(left - right) > 1) return false;
return isBalanced(root.left) && isBalanced(root.right);
}
private int getHeight(TreeNode n) {
if (n == null) return 0;
return Math.max(getHeight(n.left), getHeight(n.right)) + 1;
}
这是来自leetcode http://discuss.leetcode.com/questions/276/balanced-binary-tree的代码 因为讨论在那里关闭。我只是想问为什么他们说这个代码时间复杂度是nlogn而不是O(n) 感谢
答案 0 :(得分:0)
显然getHeight()
的复杂性是O(logn)。在isBalanced()
中,它是一个递归函数,它将在O(n)的复杂度下遍历树,而在每个节点处它调用getHeight()
函数。所以总复杂度是O(nlogn)。