您的位置:首页 > 其它

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

2015-02-04 15:59 429 查看
[b]在阅读的过程中有任何问题,欢迎一起交流[/b]

邮箱: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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: