数据结构-树



树可以用几种方式定义。定义树的一种自然方式是递归的方式,一棵树是一些节点的集合,这个集合可以是空集,如果是非空,则一棵树右称作根的节点r以及0个或者

多个非空的树组成,这些子树中每一棵树都来自根r的一条有向的边所连接。


二叉树

二叉树是一棵树,其中每个节点都不能多余两个的儿子。


表达式树

表达式树的树叶是操作数,比如常数或者变量,而其他节点为操作数。


二叉查找树

使得二叉树成为二叉查找树的性质是,对于树中的每个节点x,它的左子树中所有关键字值小于x的关键字值,而它的右子树中的所有关键字

值大于x的关键值。


find

1、如果树为空,则返回null;

2、如果存储在T中的关键字是X,那么我们返回T

3、否则对左子树或右子树进行递归


Insert

进行插入的例程是简单的,为了将x插入树中,可以像用Find那样沿着树查找


Delete

最困难的是删除操作

1、如果节点是叶子节点,则立即被删除,

2、如果节点有一个儿子,则该节点可以在其父节点调整指针绕过该节点后被删除

3、如果有两个节点,一般的删除策略是用右子树中最小的数据代替该节点的数据并递归第删除那个节点。


树可以用几种方式定义。定义树的一种自然方式是递归的方式,一棵树是一些节点的集合,这个集合可以是空集,如果是非空,则一棵树右称作根的节点r以及0个或者

多个非空的树组成,这些子树中每一棵树都来自根r的一条有向的边所连接。


二叉树

二叉树是一棵树,其中每个节点都不能多余两个的儿子。


表达式树

表达式树的树叶是操作数,比如常数或者变量,而其他节点为操作数。


二叉查找树

使得二叉树成为二叉查找树的性质是,对于树中的每个节点x,它的左子树中所有关键字值小于x的关键字值,而它的右子树中的所有关键字

值大于x的关键值。


find

1、如果树为空,则返回null;

2、如果存储在T中的关键字是X,那么我们返回T

3、否则对左子树或右子树进行递归


Insert

进行插入的例程是简单的,为了将x插入树中,可以像用Find那样沿着树查找


Delete

最困难的是删除操作

1、如果节点是叶子节点,则立即被删除,

2、如果节点有一个儿子,则该节点可以在其父节点调整指针绕过该节点后被删除

3、如果有两个节点,一般的删除策略是用右子树中最小的数据代替该节点的数据并递归第删除那个节点。


二叉平衡树

二叉平衡树上的平衡因子定义为该节点的左子树的高度减去右子树的高度。可见二叉平衡树上的所以节点的平衡因子只可能是-1,1,0.

二叉平衡树右成AVL树,或者是空树,或是具有以下性质的二叉树。

1、其根的左、右子树高度差的绝对值不超过1

2、其根的左、右树都是二叉平衡树


AVL二叉搜索树既是二叉搜索树又是二叉AVL树

一般情况下,一个新节点的插入后会影响从根节点到新节点的路径上的所有节点的平衡因子值,如果新结点查在这条路径上某个节点的左子树上,

那么该结点的平衡因子加1,否则将减1.

如果插入前,从根结点到新结点插入位置路径上的所有结点的平衡因子均为0,那么插入后这棵树仍然为二叉平衡树,而高度加1,如果这条路径上,

某个结点的平衡因子不为0,但自它以下直至新结点的所有结点的平衡因子原先都为0,那么插入新结点后,以结点s为根的子树将是有可能不平衡

的最小子树。


B-树 

阶为M的B-树是一棵具有下列结构特性的树

1.树的根或者是一片树叶,或者其儿子树在2-M之间

2.除根外,所有非树叶结点的儿子数在【M/2】和M之间

3.所有的树叶都在相同的深度上。


在一个结点上存放多个元素而不是一个元素是明智的做法。称为页,但是页不是越大越好,因为内存空间控件是有限的,并且读进的页越大所花费的时间就会

越大。


B-树的插入

将一个元素插入B-树,首先要检查B-树中是否包含相同关键字值的元素,如果存在,则插入失败,否则搜索必定终止在失败结点处。此时,将该元素插入该失败结点

的上一层的叶子结点中。如果插入后该叶子结点中包含的元素个数不超过m-1,则插入成功完成,否则需做结点分裂。

1、在B-树中搜索给定关键字值的元素,如果搜索成功,表示有重复元素,插入运算失败告终。否则将新元素和一个空指针插入搜索失败出的叶结点。

2、若插入新元素(和一个指针后),结点q未溢出。即结点中包含的元素个数未超过m-1(指针数为超过m),则插入运算成功终止。

3、若插入新元素后,结点q已溢出,则必须进行结点的分裂操作。将结点一分为3,分裂处发生在位置[m/2]中,关键字值【m/2】之前的值保留在原来的结点中,在她之后

的元素存放在新创建的结点中,而关键字K[M/2]和地址将插入结点q的双亲结点中。这意味着该双亲结点中新增了一个元素和一个指针。因此,必须检查双亲结点

的溢出问题。

4、按照3的原则,根节点q产生分裂,根节点没有双亲。那么分裂的两个节点的指针q和q’以及k【m/2】应该组成一个新结点。B-树增高1、


B-树的删除

从B-树上删除一个指定的元素的操作通插入一样,是从叶子结点开始的。如果被删除的结点不在叶子结点中,那么右它右边树上的最小元素代替。集

由大于被删除元素的最小元素取代之。


首先搜索被删除元素,如果不存在被删除的元素,则删除运算失败终止。如果搜索成功,且被删除的元素在叶子结点中。则从该叶子结点删除该元素,如果被删除的元素

不在叶子结点中,那么用它的右侧子树上的最小元素取代之(必定在叶子结点中),然后从叶子结点中删除取代元素。


如果删除元素后,当前结点中至少包含【m/2】-1个元素,删除运算成功结束。


如果删除元素后,当前结点中包含不足【m/2】个元素,则可以向其左兄弟‘借’一个元素,否则其右侧兄弟有多于元素,则向其右侧兄弟借。借元素是旋转进行的。


如果删除元素后,当前结点中包含不足【m/2】个元素,且其左右两侧兄弟都只有【m/2】-1个元素。则只能进行‘连接’,


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值