牛客网刷题|平衡二叉树

题目来源:牛客网

编程连接

题目描述

输入一棵二叉树,判断该二叉树是否是平衡二叉树。

题目解析:

平衡二叉树的概念:左右子树的深度相差不大于1即可。
根据上一题,求树的深度即可调用。

代码:

class Solution { public: bool IsBalanced_Solution(TreeNode* pRoot) { if(pRoot == NULL) return true; return (abs(getDepth(pRoot->left) - getDepth(pRoot->right)) <=1)&&(IsBalanced_Solution(pRoot->left))&&(IsBalanced_Solution(pRoot->right)); } int getDepth(TreeNode* pRoot) { if(pRoot == NULL) return 0; int len1 = getDepth(pRoot->left); int len2 = getDepth(pRoot->right); return ((len1 > len2)?len1:len2 )+ 1; } };

运行时间:4ms;占用内存:480k

很明显递归的时候会重复计算跟的深度。

换一种递归:

class Solution {
public:
    bool flag = true;
    bool IsBalanced_Solution(TreeNode* pRoot) {
        getDepth(pRoot);
        return flag;
    }

    int getDepth(TreeNode* pRoot)
    {
        if(pRoot == NULL)
            return 0;
        int left = getDepth(pRoot->left);
        int right = getDepth(pRoot->right);

        if(abs(left -right) > 1)   //注意,这个地方很诡异,不能设为<=1时为false。
            flag = false;

        return (left>right?left:right)+1;

    }
};

运行时间:3ms;占用内存:484k

    原文作者:平衡二叉树
    原文地址: https://blog.csdn.net/legalhighhigh/article/details/80243183
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞