剑指offer第三十九题:平衡二叉树

题目描述

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

思路:

首先说明平衡二叉树的概念:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

剑指offer第三十八题是计算二叉树的深度,那么这里我们可以计算左子树和右子树的深度,再比较它们的差值,即可判断是否是平衡二叉树。

代码:

class Solution {
public:
    int maxdepth(TreeNode* p)
    {
        while(p!=NULL)
        {
            return max((maxdepth(p->left) + 1),(maxdepth(p->right) + 1));
        }
        return 0;

    }
    bool IsBalanced_Solution(TreeNode* pRoot) {
        if (pRoot == NULL)
            return true;
        return IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right) &&
            abs(maxdepth(pRoot->left) - maxdepth(pRoot->right)) <= 1;//平衡二叉树的左子树
                                                         //和右子树都是平衡二叉树,所以再比较
                                                         //它们深度的同时,也要对它们单独判断
                                                         是否是平衡二叉树。
    }
    
};

 

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