【LeetCode-树】检查平衡性

题目描述

实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1。
示例:

给定二叉树 [3,9,20,null,null,15,7]
    3
   / 
  9  20
    /  
   15   7
返回 true 。

给定二叉树 [1,2,2,3,3,null,null,4,4]
      1
     / 
    2   2
   / 
  3   3
 / 
4   4
返回 false 。

题目链接: https://leetcode-cn.com/problems/check-balance-lcci/

思路

使用递归来做。用递归来求左右子树的高度以及高度差,然后记录最大的高度差 maxDelta。如果 maxDelta >1,则不是平衡的,否则是平衡的。代码如下:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int maxDelta = -1;  // 记录左右子树高度的最大差值
    bool isBalanced(TreeNode* root) {
        getHeight(root);
        if(maxDelta<=1) return true;
        else return false;
    }

    int getHeight(TreeNode* root){
        if(root==nullptr) return 0;

        int leftHeight = getHeight(root->left) + 1;
        int rightHeight = getHeight(root->right) + 1;
        maxDelta = max(maxDelta, abs(leftHeight-rightHeight));
        return max(leftHeight, rightHeight);
    }
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(h)
    h为树的高度。
原文地址:https://www.cnblogs.com/flix/p/12833229.html