leetcode面试题04.04(检查树的平衡性)--C语言实现

久未见 提交于 2020-08-09 05:45:42

求:

实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 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,如是返回真,否则返回假。

首先,需要一个高度判断函数,使用递归的形式实现,任意一个节点的高度,为左右子树高度值中的较大者+1。如果该节点是null,返回0(递归基)

对树的平衡性判断采用后序遍历,先判断树根是否是null,如是返回真。如果树根不是null,先判断左右子树是否平衡,如果不平衡返回假,否则返回真。在左右子树高度都平衡的情况下,判断根节点是否平衡,整个过程递归实现即可。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
 
int  max( int  x, int  y){
     return  x>y?x:y;
}
 
int  depth( struct  TreeNode* root){
     if (root==NULL)   return   0 ;
     return  max(depth(root->left),depth(root->right))+ 1 ;
}
 
bool  isBalanced( struct  TreeNode* root){
     if (root==NULL)   return   true ;
     if (isBalanced(root->left)&&isBalanced(root->right))
         return  abs(depth(root->left)-depth(root->right))> 1 ? false : true ;
     return   false ;    
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!