zoukankan      html  css  js  c++  java
  • 平衡二叉树

    给定一个二叉树,判断它是否是高度平衡的二叉树。

    本题中,一棵高度平衡二叉树定义为:

    一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

    示例 1:

    给定二叉树 [3,9,20,null,null,15,7]

    3
    /
    9 20
    /
    15 7
    返回 true 。

    示例 2:

    给定二叉树 [1,2,2,3,3,null,null,4,4]

    1
    /
    2 2
    /
    3 3
    /
    4 4
    返回 false 。

    解:这道题思路是用左右子树的最大深度求解,但如果只求根下的左右子树的深度的话效率太慢,此解法在发现任一子树高度不平衡的情况下即返回

     1 /**
     2  * Definition for a binary tree node.
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12     bool isBalanced(TreeNode* root) {
    13         return findDeep(root)!=-1;
    14     }
    15     
    16     int findDeep(TreeNode* root)
    17     {
    18         int i_deepL=0,i_deepR=0;
    19         if(root==nullptr)
    20         {
    21             return 0;
    22         }
    23         i_deepL+=findDeep(root->left);
    24         i_deepR+=findDeep(root->right);
    25         if(i_deepL==-1||i_deepR==-1)
    26         {
    27             return -1;
    28         }
    29         if(i_deepL-i_deepR>1||i_deepR-i_deepL>1)
    30         {
    31             return -1;
    32         }
    33         return max(i_deepL,i_deepR)+1;          //加上本层的高度
    34     }
    35 };
  • 相关阅读:
    P3688 [ZJOI2017] 树状数组 【二维线段树】
    CF516D Drazil and Morning Exercise【并查集,结论】
    Luogu5540 最小乘积生成树
    CDW数学小笔记
    ZROI 金华集训 线性代数选讲
    多项式乘法(代码)
    我的vimrc
    P4562 [JXOI2018]游戏
    [POJ3585]Accumulation Degree
    [CH5302]金字塔
  • 原文地址:https://www.cnblogs.com/wangshaowei/p/11363829.html
Copyright © 2011-2022 走看看