1.平衡二叉树
平衡二叉树,又称为AVL树,它是一种特殊的二叉排序树。AVL树或者是一棵空树,或者是具有以下性质的树:
左子树和右子树都是平衡二叉树;
左子树和右子树的深度(高度)之差绝对值不超过1。
2.平衡二叉树判定
2.1 判定方法
借助后续遍历二叉树的思路(左右根),当遍历一个结点之前就已经遍历了此结点的左右结点。因此,在遍历每个结点的时候就记录它的深度(某一个结点的深度就是它到叶子节点路径的长度),这样就可以一遍一遍的判断子树是否是平衡二叉树。
2.2 算法实现
bool IsBalanced_Solution(TreeNode* pNode)
{
int depth = 0;
return IsBalanced(pNode,depth);
}
bool IsBalanced(TreeNode* pNode,int& depth)
{
if(pNode == nullptr)
{
depth = 0;
return true;
}
int leftDepth,rightDepth;//左右子树的深度
if(IsBalanced(pNode->left,leftDepth) && IsBalanced(pNode->right,rightDepth))
{
int diff = leftDepth - rightDepth;
if(diff<=1 && diff>=-1)
{
*depth = leftDepth>rightDepth?leftDepth+1:rightDepth+1;
return true;
}
}
return false;
}
3.获取二叉树的深度(延伸)
int depht(TreeNode* pNode)
{
if(pNode == nullptr)
return 0;
int leftDepth = depth(pNode->left);
int rightDepth = depth(pNode->right);
return leftDepth>rightDepth?leftDepth+1:rightDepth+1;
}