判断二叉树是否为平衡二叉树

本文为个人的学习笔记,如果发现文中有那些不对的地方,希望大家多指点,在下先谢谢各位学友。

出自 《Cracking the coding interview》

首先想到的是简单的递归方法:

private int height(TreeNode node){
    if(root == null) return 0;
    return 1 + Math.max(height(root.left),height(root.right));
}

public boolean isBanlanced(TreeNode node){
    if(node == null) return true;
    int l = height(node.left);
    int r = height(node.right);
    if(Math.abs(l-r) > 1) return false;
    return (isBanlanced(node.left) && isBanlanced(node.right));

}

我们知道递归方法简洁但是效率却不高,而且万一递归的深度过大,很可能会导致stackoverflow 。并且递归算法也不是cache friendly。

这里递归算法最大的性能瓶颈在于,在调用height 方法时(hot 点)出现许多子问题重叠计算,T(n)= O(n2)。

 

未完待续。。。。

 

结论:与二叉树有关的问题,可以会很快联想到递归的方法,有些问题可以通过遍历二叉树(前序,中序,后序)来解决。

posted @ 2013-11-25 23:15  andyqee  阅读(217)  评论(0编辑  收藏  举报