题目:如何判断一个二叉树是平衡二叉树
定义:
平衡二叉树(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)
时间: 2024-10-26 02:37:28