码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-02-04 16:34:19      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

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

定义

平衡二叉树(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)

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

标签:

原文地址:http://blog.csdn.net/u010515761/article/details/43487133

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!