剑指Offer之平衡二叉树

题目描述

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

解题思路

首先,要知道什么是平衡二叉树,总结一句话,左右子树深度之差不超过1.

所以,这个题目是利用了上一题的求深度,然后递归判别所有的子树是否是平衡二叉树。。。

AC代码

class Solution {
  public:
    bool IsBalanced_Solution(TreeNode* pRoot) {
        if(pRoot == nullptr) {
            return true;
        }
        int l = TreeDepth(pRoot->left);
        int r = TreeDepth(pRoot->right);
        if(abs(r - l) > 1) {
            return false;
        }
        // 向下递归地判断
        return IsBalanced_Solution(pRoot->left) &&
               IsBalanced_Solution(pRoot->right);
    }
	
	// 计算树的深度
    int TreeDepth(TreeNode* pRoot) {
        if(pRoot == nullptr) {
            return 0;
        }
        int l = TreeDepth(pRoot->left);
        int r = TreeDepth(pRoot->right);
        return (l > r) ? (l + 1) : (r + 1);
    }
};
    原文作者:平衡二叉树
    原文地址: https://blog.csdn.net/qq_35976351/article/details/83015149
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞