树的数据结构 java_java数据结构之树

数据结构中有很多树的结构,其中包括二叉树、二叉搜索树、2-3树、红黑树等等。本文中对数据结构中常见的几种树的概念和用途进行了汇总,不求严格精准,但求简单易懂。

1. 二叉树

二叉树是数据结构中一种重要的数据结构,也是树表家族最为基础的结构。

二叉树的定义:二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2i-1个结点;深度为k的二叉树至多有2k-1个结点;对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1。

e952e6390fa67a08a0568acbb04dbd6b.png

满二叉树(完美二叉树):除最后一层无任何子节点外,每一层上的所有结点都有两个子结点。也可以这样理解,除叶子结点外的所有结点均有两个子结点。

节点数达到最大值,所有叶子结点必须在同一层上。

eb96b25709b3c28fce8ff99ffb9979d1.png

满二叉树的性质:

叶子只能出现在最下一层。

非叶子结点度一定是 2。

在同样深度的二叉树中,满二叉树的结点个数最多,叶子树最多。

完全二叉树:若设二叉树的深度为h,除第 h 层外,其它各层 (1~(h-1)层) 的结点数都达到最大个数,第h层所有的结点都连续集中在最左边,这就是完全二叉树。

9aa29b56719e0c50905e393a50aa262c.png

叶子结点只能出现在最下一层(满二叉树继承而来)

最下层叶子结点一定集中在左 部连续位置。

倒数第二层,如有叶子节点,一定出现在右部连续位置。

同样结点树的二叉树,完全二叉树的深度最小(满二叉树也是对的)。

2. 二叉查找树

二叉查找树定义:又称为是二叉排序树(Binary Sort Tree)或二叉搜索树。二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:

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

2) 若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;

(左子节点=根)

3) 左、右子树也分别为二叉排序树;

4) 没有键值相等的节点(节点值唯一)

二叉查找树的性质:对二叉查找树进行中序遍历,即可得到有序的数列。

二叉查找树的高度决定了二叉查找树的查找效率。

二叉查找树的插入过程如下:

1) 若当前的二叉查找树为空,则插入的元素为根节点;

2) 若插入的元素值小于根节点值,则将元素插入到左子树中;

3) 若插入的元素值不小于根节点值,则将元素插入到右子树中。

二叉查找树的删除,分三种情况进行处理:

1) p为叶子节点,直接删除该节点,再修改其父节点的指针(注意分是根节点和不是根节点),如图a;

e7c04fd90c925a66f54a64cb6d318021.png

2) p为单支节点(即只有左子树或右子树)。让p的子树与p的父亲节点相连,删除p即可(注意分是根节点和不是根节点),如图b;

86e647a4fd2d18f17032cd9f4d2af969.png

3) p的左子树和右子树均不空。找到p的后继y,因为y一定没有左子树,所以可以删除y,并让y的父亲节点成为y的右子树的父亲节点,并用y的值代替p的值;或者方法二是找到p的前驱x,x一定没有右子树,所以可以删除x,并让x的父亲节点成为y的左子树的父亲节点。如图c。

fb6944867e2113e7c7571ef2447cf4d4.png

2.4 平衡二叉树

平衡二叉树又被称为 AVL 树(区别于AVL算法),它是一棵二叉排序树,且具有以下性质:

它是一棵空树或它的左右两个子树的高度差的绝对值不超过 1,并且左右两个子树都是一棵平衡二叉树

非叶子节值大于左边子节点、小于右边子节点;

没有值相等重复的节点;

c5179d54e321c74c7873ab9290e0fc34.png

B+树

一个m阶的B+树具有如下几个特征:

1.有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。

2.所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。

3.所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。

76be2eff48337ddb803b2229a4136de1.png

a396d5d23abfa846c758633b9c28b7a7.png

60221be9917bcc5ebd295e42322f1b43.png

207381052dfc1a004a524fea87d15a3d.png

ee99b5740bfe03512bf29189c57bc152.png

dea48322fc8f514ce4a8782e52b57492.png

B+树是为磁盘或其他直接存取辅助设备而设计的一种平衡查找树,在B+树中,所有记录节点都是按键值的大小顺序存放在同一层的叶节点中,各叶节点指针进行连接。

更详细的介绍,请看这篇文章

https://blog.csdn.net/qq_35571554/article/details/82759668

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值