二叉树基本概念、二叉排序树、二叉平衡树与笛卡尔树

二叉树的定义

二叉树

  • 定义:

    • 是另一种树形结构,他的特点是每个结点之多只有两颗子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次数不能任意颠倒
  • 性质:

    • 1.在二叉树的第i层上之多有2的(i-1)次幂个结点(i>=1)
    • 2.深度为k的二叉树之多有2的k次幂 -1 的结点 (k>=1)
    • 3.对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1
    • 4.具有n个结点的完全二叉树的深度为
    • 5.如果对一棵有n个结点的完全二叉树

满二叉树

一棵深度为k且有(2的k次幂)-1个结点的二叉树
《二叉树基本概念、二叉排序树、二叉平衡树与笛卡尔树》

完全二叉树

深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应时,称之为完全二叉树
《二叉树基本概念、二叉排序树、二叉平衡树与笛卡尔树》

二叉树的存储结构

《二叉树基本概念、二叉排序树、二叉平衡树与笛卡尔树》

线索二叉树

若结点有左子树,则其lchild域指示其做孩子,否则零lchild域指示其前驱;若结点有右子树,则其rchild域指示其右孩子,否则零rchild域指示其后继。

lchildLTagdataRTagrchild

其中:
LTag = 0 时,lchild域指示结点的左孩子
1时,lchild域指示结点的前驱
RTag = 0时,rchild域指示结点的右孩子
1时,rchild域指示结点的后继

线索链表

以这种结点结构构成的二叉链表作为二叉树的存储结构,叫线索链表。其中指向结点前驱和后继的指针,叫线索。加上线索的二叉树称之为线索二叉树。
对二叉树以某种次序遍历使其变为线索二叉树的过程叫线索化

《二叉树基本概念、二叉排序树、二叉平衡树与笛卡尔树》

二叉树的二叉线索存储表示
《二叉树基本概念、二叉排序树、二叉平衡树与笛卡尔树》

二叉查找树(二叉排序树)BFS

二叉查找树定义

  • 二叉查找树,也叫二叉排序树。
    二叉排序树或者是一棵空树,或者是一颗具有下列特性的非空二叉树:

    • 若左子树非空,则左子树上所有结点关键字值均小于根结点的关键字值
    • 若右子树非空,则右子树上所有结点关键字值均大于根节点的关键字值
    • 左,右子树本身也分别是一棵二叉排序树

    根据二叉排序树的定义,有左子树结点值<根结点值<右子树结点值,所以,对二叉排序树进行中序遍历,可以得到一个递增的有序序列。

    《二叉树基本概念、二叉排序树、二叉平衡树与笛卡尔树》
    此 二叉排序树中序遍历结果:15,20,30,50,60,70

二叉排序树的查找

二叉排序树的查找是从根结点开始,沿某一个分支逐层向下进行比较的过程。
1.若二叉排序树非空,将给定值与根结点的关键字比较:
2.相同,则查找成功;
3.若不相同,则当根结点的关键字大于给定关键字值时,在根结点的左子树中查找,否则在根结点的右子树中查找。
这显然是一个递归的过程
《二叉树基本概念、二叉排序树、二叉平衡树与笛卡尔树》

二叉排序树的插入

二叉排序树作为一种动态集合,其特点是树的结构通常不是一次生成的,而是在查找过程中,当树中不存在关键字等于给定值的结点时再进行插入。
由于二叉排序树是递归定义的,插入节点的过程是,若原二叉排序树为空,则直接插入节点;
否则,若关键字k小于根节点关键字,则插入到左子树中,若关键字k大于根节点关键字,则插入到右子树中。
《二叉树基本概念、二叉排序树、二叉平衡树与笛卡尔树》

二叉排序树的创建

构造一棵二叉排序树就是依次输入数据元素,并将它们插入到二叉排序树中的适当位置上的过程。
具体过程为,每读入一个元素,就建立一个新节点,若二叉排序树非空,则将新结点的值与根结点的值比较,如果小于根节点的值,则插入到左子树中,否则插入到右子树中;若二叉排序树为空,则新结点作为二叉排序树的根结点
《二叉树基本概念、二叉排序树、二叉平衡树与笛卡尔树》

二叉排序树的删除

在二叉排序树中删除一个结点时不能把以该结点为根的子树上的结点都删除,必须先把被删除结点从存储二叉排序树的链表上摘下,将因删除结点而断开的二叉链表重新连接起来,同时却表二叉排序树的性质不会丢失。

删除操作的实现过程按3中情况来处理
①如果被删除结点z是叶结点,则直接删除,不会破坏二叉排序树的性质
②若结点z只有一棵左子树或右子树,则让z的子树称为z父结点的子树,替代z的位置。
③若结点z有左、右两棵子树,则灵z的直接后继(或直接前驱)替代z,然后从二叉排序树中删去这个直接后继(或直接前驱),这样就转换成了第一或第二种情况.

《二叉树基本概念、二叉排序树、二叉平衡树与笛卡尔树》
《二叉树基本概念、二叉排序树、二叉平衡树与笛卡尔树》

二叉平衡树(AVL)

二叉平衡树定义

为了避免树的高度增长过快,降低二叉排序树的性能,我们规定在插入和删除二叉树结点时,要保证任意节点的左、右子树高度差的绝对值最多不超过1,将这样的二叉树称之为平衡二叉树
定义结点左子树与右子树的高度差为该结点的平衡因子,则平衡二叉树结点的平衡因子的值只可能是-1,0,1

1.平衡二叉树可以是一颗空树,或者是具有下列性质的二叉树:
2.①它的左子树和右子树都是平衡二叉树,且左子树和右子树 的高度差的绝对值不超过1
《二叉树基本概念、二叉排序树、二叉平衡树与笛卡尔树》
结点附近的值为平衡因子的值

二叉平衡树插入

二叉排序树保证平衡点额基本思想:每当在二叉排序树中插入(删除)一个结点时,首先要检查其插入路径上的结点是否因为此次操作而导致了了不平衡。如果导致了不平衡,则先找到插入路径和是哪个离插入点最近的而平衡因子绝对值大于1的结点A,再对以A为根的子树,在保持二叉排序树特性的前提下,调整各结点的位置关系,使之重新达到平衡。

《二叉树基本概念、二叉排序树、二叉平衡树与笛卡尔树》

平衡二叉树的插入过程前半部分与二叉排序树相同,但是在新结点插入后,如果造成了查找路径上某个结点不再平衡,需要作出响应的调整。一般可将失去平衡后进行调整的规律归纳为下列4中情况:

①LL平衡旋转(右单旋转)

由于在结点A的左孩子(L)的左子树(L)上插入了新结点,A的平衡因子由1增至2,导致以A为根的子树失去平衡,需要一次向右旋转操作。将A的左孩子B向右上旋转代替A成为根结点,将A结点向游侠旋转称为B的右子树的根结点,而B的原右子树则作为A结点的左子树
《二叉树基本概念、二叉排序树、二叉平衡树与笛卡尔树》

②RR平衡旋转(左单旋转)

由于在结点A的右孩子(R)的右孩子(R)上插入了新结点,A的平衡因子由-1减至-2,导致以A为根的子树失去平衡,需要一次向左的旋转操作。将A的右孩子B向左上旋转代替A称为根结点。将A结点向左下旋转称为B的左子树的根结点,而B的原左子树则作为A结点的右子树
《二叉树基本概念、二叉排序树、二叉平衡树与笛卡尔树》

③LR平衡旋转(先左后右双旋转)

由于在A左孩子(L)的右孩子(R)上插入新结点,A的平衡因子由1增至2,导致以A为根的子树失去平衡,需要进行两次旋转操作,先左旋转后右旋转。先将A结点的左孩子B的右子树的根结点C向左上旋转提升到B结点位置,然后再把该C结点的右上旋转提升到A结点位置。
《二叉树基本概念、二叉排序树、二叉平衡树与笛卡尔树》

④RR平衡旋转(先右后左双旋转)

由于在A的右孩子(R)的左子树(L)上插入新结点,A的平衡因子由-1减至-2,导致以A为根的子树失去平衡。需要进行两次旋转操作,先右旋转后左旋转。先将A结点的右孩子B的左子树的根节点C向右上旋转提升到B结点位置,庵后再把该C结点向左上旋转提升到A结点的位置
《二叉树基本概念、二叉排序树、二叉平衡树与笛卡尔树》

二叉平衡树查找

在平衡二叉树上进行查找的过程和二叉排序树相同,因此,在查找的过程中和给定值进行比较的关键字个数不超过树的深度。假设以Nh表示深度为h的平衡树中含有的最少结点数。显然N0=0,N1=1,N2=2,并且有Nh=N(h-1)+N(h-2)+1

笛卡尔树

笛卡尔树定义

笛卡尔树是一棵二叉树,树的每个节点有两个值,一个为key,一个为value。
光看key的话,笛卡尔树是一棵二叉搜索树,每个节点的左子树的key都比它小,右子树都比它大;

笛卡尔树性质

1、结点一一对应于数列元素。即数列中的每个元素都对应于树中某个唯一结点,树结点也对应于数列中的某个唯一元素
《二叉树基本概念、二叉排序树、二叉平衡树与笛卡尔树》

    原文作者:平衡二叉树
    原文地址: https://blog.csdn.net/xiaojie_570/article/details/53898854
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞