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 };
  • 相关阅读:
    什么是DI
    什么是IOC?
    什么是spring框架?spring框架到底有什么用?spring框架到底做了些什么?
    JSP中动态include和静态include的区别?
    jsp静态include和动态include区别
    Request对象的主要方法有哪些?
    如何防止重复提交
    JSTL 标签大全详解
    序列化对象为xml字符串
    ASP.NET获取客户端的相关信息
  • 原文地址:https://www.cnblogs.com/wangxf2019/p/14018128.html
Copyright © 2011-2022 走看看