zoukankan      html  css  js  c++  java
  • 微软面试题: LeetCode 110. 平衡二叉树 easy 出现次数:3

    题目描述:
      给定一个二叉树,判断它是否是高度平衡的二叉树。

      本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

    分析:

      二叉树的题目优先考虑递归解法。设计的递归函数完成两个功能:

    1.  求当前二叉树的高度 depth;

      这里二叉树的高度指的是二叉树的最深路径上的节点数,不用边数是为了区分 二叉树根为空指针(depth = 0)和

    二叉树只有一个节点(depth = 1)这两种情况。

         若二叉树根为空指针  depth = 0;  //递归出口

      若二叉树只有一个节点 depth = 1;//递归出口

      其他情况 depth = max(left_depth,right_depth); 

    2. 判断当前二叉树是不是平衡二叉树; 

      将求左右子树的高度和判断其是否是平衡二叉树的任务分派给递归函数后,若 左右子树都是平衡二叉树且

    左右子树的高度差不大于1 该二叉树是平衡二叉树,否则不是平衡二叉树。

          若二叉树根为空指针  return true;  //递归出口

      若二叉树只有一个节点 return true;//递归出口

      其他情况  return left_balcance && right_balance && abs(left_depth-right_depth) <=1

      

     1 /**
     2  * Definition for a binary tree node.
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
     8  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
     9  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
    10  * };
    11  */
    12 class Solution {
    13 public:
    14     bool isBalanced(TreeNode* root) 
    15     {
    16        int depth = 0;
    17        return isBalancedHelper(root,depth);
    18     }
    19 //为了区分root空指针和root只有一个节点的情况
    20 //depth 表示二叉树最深路径上的节点数,不是边的数量
    21 //空指针depth = 0; 只有一个节点depth = 1;
    22      bool isBalancedHelper(TreeNode* root,int &depth)
    23      {
    24          if(root == nullptr )
    25          {
    26              depth = 0;
    27              return true;
    28          }
    29          int left_depth = 0;
    30          bool left_balance = isBalancedHelper(root->left,left_depth);
    31          int right_depth = 0;
    32          bool right_balance = isBalancedHelper(root->right,right_depth);
    33          if(root->left == nullptr && root->right == nullptr)
    34          {
    35              depth = 1;
    36              return true;
    37          }
    38          depth = max(left_depth,right_depth) + 1;
    39          if(left_balance && right_balance && abs(left_depth - right_depth) <= 1)
    40          {
    41              return true;
    42          }
    43          else
    44          {
    45              return false;
    46          }
    47      }
    48 };
  • 相关阅读:
    基于antd封装一个高可用form组件 减少cv代码导致的bug
    写一个umi插件 自动生成代码 解放cv的双手
    jquery.validate的一个bug
    ef6+mysql的bug
    angularJS使用ocLazyLoad实现js延迟加载
    postgresql,postgis,geoserver 发布地图服务,并用.net mvc openlayers3进行显示
    EF框架操作postgresql,实现WKT类型坐标的插入,查询,以及判断是否相交
    jquery validate 之多tab页同时校验问题
    js去除空格12种方法
    个人工具清单
  • 原文地址:https://www.cnblogs.com/wangxf2019/p/14018128.html
Copyright © 2011-2022 走看看