二叉平衡树

Posted Ivan B.G. Liu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉平衡树相关的知识,希望对你有一定的参考价值。

1. 定义:
    平衡二叉树具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。常用算法有红黑树、AVL、Treap、伸展树等。其高度一般都良好地维持在O(log(n)),大大降低了操作的时间复杂度。
 
2. 判断二叉树是否平衡:
    采用递归的方式,判断某个结点的平衡因子(左右子树高度差)是否大于1,若平衡因子大于1,则其一定不是平衡二叉树,否则,继续判断。代码如下:
int depth(TreeNode * root)
{
   //重要的递归边界条件,用于递归下潜到最下层
     if(root == NULL)
         return 0;
   //left和right会递归到最下层,从下而上地返回每个子节点的高度
      int left = depth(root->left);
      int right = depth(root->right);
   //一旦根的下层子节点有-1返回,-1会上潜到最终也返回-1
      if(left==-1 || right==-1 || abs(left-right)>1)
          return -1;
   //+1很关键,保证了树高度的上增
      return (left>right ? left : right) + 1;
}

bool isBalanced(TreeNode * root)
{
     return depth(root) != -1;
}
 
3. 求平衡二叉树的高度:
    采用递归的方式求AVL树的高度,代码如下:
int depth(TreeNode * root)
{
   //重要的递归边界条件,用于递归下潜到最下层
      if(root == NULL)
          return 0;
   //left和right会递归到最下层,从下而上地返回每个子节点的高度
      int left = depth(root->left);
      int right = depth(root->right);
   //+1很关键,保证了树高度的上增
      return (left>right ? left : right) + 1;
}

 

以上是关于二叉平衡树的主要内容,如果未能解决你的问题,请参考以下文章

判断一颗二叉树是否为二叉平衡树 python 代码

树--07---二叉树--04--平衡二叉树(AVL树)

求数据结构算法平衡二叉树实现代码

编程算法 - 推断二叉树是不是平衡树 代码(C)

[数据结构4.8]平衡二叉树

平衡二叉树平衡调整代码