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


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

    出自 《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)。

    未完待续。。。。

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

  • 相关阅读:
    Python-模块
    POJ 1631 nlogn求LIS
    POJ 1274 二分图匹配
    POJ 3661 DP
    POJ 3662 二分+Dijkstra
    POJ 3666 DP
    POJ 2373 单调队列优化DP
    祝自己生日快乐
    POJ 2385 DP
    POJ 3122 Pie 二分答案
  • 原文地址:https://www.cnblogs.com/yeek/p/3441066.html
Copyright © 2020-2023  润新知