程序员面试之必考题:平衡二叉树的基本概念

Posted 开点工作室

tags:

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


平衡二叉树是二叉树的一种应用,在介绍平衡二叉树之前,首先来看一看什么是二叉排序树。


  1.  二叉排序树


二叉排序树(BST)或者是一棵空树,或者是具有下列性质的二叉树:


①若它的左子树不空,则左子树中所有结点的值均小于树根结点的值;


②若它的右子树不空,则右子树中所有结点的值均大于等于树根结点的值;


③其左、右子树也分别是二叉排序树。


二叉排序树也称为二叉查找树,采用二叉链表结构存储。


由于二叉排序树的有序性,在树中进行查找的效率较高。查找的对象称为查找目标,若找到称为查找成功;否则称为查找失败。


二叉排序树各结点中保存的值称为关键字,有些应用中,要求关键字具有唯一性。


二叉排序树的每棵子树仍是二叉排序树。每个结点的左子结点的值均小于结点本身的值,其右子结点的值均大于等于结点本身的值。这个条件是其必要条件而非充分条件。换句话说,若一棵二叉树中每个结点左子结点的值小于结点的值,其右子结点的值大于等于结点的值,树不一定是二叉排序树。


二叉排序树T中的最小值位于其“左下角”,即从根开始沿指针lchild一直“向下”,直到指针lchild为空的结点。同样的,T中的最大值位于其“右下角”,即从根开始沿指针rchild一直“向下”,直到指针rchild为空的结点。


对二叉排序树进行中序遍历,可得到一个升序序列。这是二叉排序树的特性之一。


对于一般二叉树来说,仅知道树的先序序列或后序序列,不能唯一确定这棵二叉树。但具体到二叉排序树,知道其先序序列或是后序序列,均能唯一确定该树,因为其中序序列是隐含给出的。


二叉排序树的操作主要有:在树中查找关键字key、在树中添加关键字key、删除树中关键字key所在的结点。


2 平衡二叉树


同样的关键字集合可以构建出不同的二叉排序树树形,实际上,关键字的插入次序决定了最终得到的树形。如果给定的初始关键字有序,则得到的二叉排序树退化为线性结构,其树高与结点数相当,查找、插入及删除的时间复杂度均为O(n)。树越退化,查找及添加操作的时间复杂度越接近O(n),消弱了树的价值。


1962年,Adelson-Velskii和E.M.Landis提出了一种二叉树结构,这种二叉树对于各级子树的深度是比较平衡的,称为平衡二叉树,又称AVL树(因三位发现者名字的首字母而得名)。它满足二叉排序树的特性,是对二叉排序树的改进,树形上也是比较平衡的,可以达到较高的查找效率。


平衡二叉树或是一棵空树,或是具有下列性质的二叉排序树:


①它的左子树和右子树的高度之差的绝对值不超过1;


②它的左、右子树都是平衡二叉树。


平衡二叉树的定义是一个递归定义。根据这一定义,平衡二叉树中每个结点的左、右子树的高度之差只能为0、1和-1这三种情况。将结点左、右子树的高度差定义为该结点的平衡因子,即对树中的每个结点,结点的平衡因子=结点左子树高-右子树高。当出现绝对值大于1的平衡因子时,称树失平衡。


在二叉排序树的构建过程中,每插入一个关键字后,检查树的平衡情况,若树失平衡,则通过旋转操作使树恢复平衡。


旋转分为单旋转及双旋转两大类,共4种情况。


(1) 左旋转

因为根的右孩子的右子树上的长路径而失平衡的树,可以通过左旋转恢复,步骤如下:

  1.  令根的右孩子变为新的根。

  2.  令原根结点变为新根结点的左孩子。

  3.  令原根的右孩子的左孩子变为原根结点的新右孩子。

左旋转的示意图如图1所示。

程序员面试之必考题(三):平衡二叉树的基本概念

(2) 右旋转

因为根的左孩子的左子树上的长路径而失平衡的树,可以通过右旋转恢复,步骤如下:

  1.   令根的左孩子变为新的根。

  2.  令原根结点变为新根结点的右孩子。

  3.  令原根的左孩子的右孩子变为原根结点的新左孩子。

右旋转类似于左旋转,可以看作是左旋转的镜像。


(3) 右-左旋转


因为根的右孩子的左子树中的长路径而引起的失平衡,必须先绕异常子树执行一次右旋转,然后再绕根执行一次左旋转。这个操作称为右-左旋转。如图2所示。


(4) 左-右旋转


因为根的左孩子的右子树中的长路径而引起的失平衡,必须先绕异常子树执行一次左旋转,然后再绕根执行一次右旋转。这个操作称为左-右旋转。与右-左旋转类似。


以上是关于程序员面试之必考题:平衡二叉树的基本概念的主要内容,如果未能解决你的问题,请参考以下文章

面试题:平衡二叉树

剑指Offer面试题55 - II. 平衡二叉树

面试题:平衡二叉树

树与二叉树数据结构详解

平衡二叉树做题手法再升级

笔试面试题目:平衡二叉树的判断