【算法题】如何判断一个二叉树是平衡二叉树

在阅读的过程中有任何问题,欢迎一起交流

邮箱:1494713801@qq.com   

QQ:1494713801

 

 

题目如何判断一个二叉树是平衡二叉树

定义

平衡二叉树(AVL):1、空二叉树是AVL树;
                                       2、如果T是一颗非空的二叉搜索树,TL和TR分别是其左子树和右子树,那么当T满足一下条件时,T是一颗AVL树:(1)TL和TR是AVL树;(2)|HL-HR|《=1,HL和HR分别是左子树和右子树的高度

示例

《【算法题】如何判断一个二叉树是平衡二叉树》

算法思想

采用递归的思想,从root节点进行递归的调用。假设叶子节点的高度是0,分别计算各个节点的左右子树的高度差;若高度差大于1则返回-1(表示不是平衡树)否则返回子树的最大高度加一。

时间复杂度

T(root) = T(left) + T(right) + O(1)

  = T(m->left) + T(m->right) + T(…) + O(1)…

  = …O(1) + O(1) = n*O(1) = O(n)

代码实现

BoolisBalanced(Node* root){

  return height(root) >= 0;

}

Int height(Node* root){

  if (root == null) return 0;

  int left = height(root -> left);

  int right = height(root -> right);

  if (abs(left,right)>1 || left < 0 || right < 0)

    return -1;

  else

    return max(left, right) + 1;

}

附:关于树的算法一般时间复杂度为O(log2 N)或O(N)

    原文作者:平衡二叉树
    原文地址: https://blog.csdn.net/u010515761/article/details/43487133
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞