leetcode 平衡二叉树

题目描述

我的思路:
构建depth()函数,先分别求左子树和右子树的深度,再判断当(左子树深度-右子树深度)<=1时,返回TRUE,否则返回FALSE。
思路的缺陷:
没有考虑到树的遍历。如果直接按照上述方法计算深度,只能计算根节点的情况,比如下面的例子... 其实遍历的思想很基础,但是基础知识太差经验不多所以很容易忽略最基础的思维。

不是平衡二叉树。但是不遍历的话会判断这棵树也是balance的。

最后思路:
先序遍历结合一开始的思想来做。

class Solution {
public:
    bool isBalanced(TreeNode* root) {
        if (root==NULL){ return true;}
        
        int left_dep = depth(root->left);
        int right_dep = depth(root->right);
        
           
        if(abs(left_dep - right_dep)<=1 && isBalanced(root->left) && isBalanced(root->right)){
            return true;
        }
        else return false;

    }
    int depth (TreeNode* root){
        if (root==NULL){ return 0;}
        return max(depth(root->left), depth(root->right)) +1;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容