zoukankan      html  css  js  c++  java
  • 【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为树的高度。
  • 相关阅读:
    vue.js 首屏优化
    ios判断是否有中文
    ios 7新特性
    NSDictionary的分类
    asiHttpRequst 超时代码判断
    ios中layoutsubview何时被调用
    ios中tableview的移动添加删除
    ios发布
    新浪博客中放大图片的做法
    ios中coredata
  • 原文地址:https://www.cnblogs.com/flix/p/12833229.html
Copyright © 2011-2022 走看看