数据结构:树

树是一种十分重要的非线性结构,是一个由 n个节点构成的有限集合。当n为0时是空树。

基本概念

节点的度:一个节点的度是其子树的个数。

树的度:树的所有节点中最大的度数

叶节点:度为0的节点。

父节点、子节点、兄弟节点、祖先节点、子孙节点。

节点的层次:规定根节点在1层,其他任以节点的层数是其父节点的层数加1。

树的深度:树中所有节点中最大层次是这棵树的深度。

分支:树中两个相邻节点的连边称为一个分支。

路径和路径长度:一个有序(前父后子)的节点序列称之为路径,一条路径上的长度称之为这条路径所包含的边的个数。


二叉树

一个二叉树是一个有穷的节点的集合,若不为空,其左右子树也是二叉树。

完美二叉树:所有的分支节点都存在着左右子树,并且叶节点都在同一层次上。

完全二叉树:完美二叉树从下到上,从右到左去除部分叶子节点后就是完全二叉树。

性质:

1、一个二叉树第i层的最大节点数为2^(i-1)

2、深度为k的二叉树有最大节点总数2^k-1

3、对于任何非空的二叉树,其叶节点个数为n1,度为2的节点数n2,那么有 n1 = n2 +1。

遍历:(从遍历中恢复二叉树!!!

中序遍历(LVR):先左再根后右。

先序遍历(VLR):先根再左后右。

后序遍历(LRV):先左再右后根。

层序遍历:一层一层从上到下,从左到右遍历。

二叉查找树

对于二叉查找树中的任何节点,其左子树的值均不大于该节点的值,右子树的值均不小于该节点的值。
1、按照中序遍历的算法,可以实现二叉查找树节点中的值按照升序排列。
2、查询一个关键字只需要O(h)的时间内就可以完成,h为树的高度。最大或者最小关键字的查询只需要沿着右子树或者左子树一直查询下去就可以找到。
3、二叉查找树的插入和删除也是在O(h)的时间内完成的。其中删除分三种情况:无子节点,此时只需修改其父节点的指向该节点的指针为null就可以;有一个子节点,将该节点的子节点的地址赋给其父节点指向该节点的指针即可;有两个子节点,查找出该节点的后继节点,用其替换需要删除的节点即可。

红黑树
红黑树是一种二叉查找树,但在每个节点上增加一个存储位表示节点的颜色,可以是red或者black。
1、性质:
<1>每个节点只有一种颜色(红或黑);
<2>根节点是黑的;
<3>每个叶子节点是黑的;
<4>如果一个节点是红的,则其叶子节点是黑的;
<5>对于每个节点,从该节点到期子孙节点的所有路径上包含相同数目的黑节点。
2、黑高度:从某个节点出发(不包括该节点)到达一个叶节点的任意一条路径上,黑色节点的个数称为该节点的黑高度bh(x)`。
3、一棵有n个节点的红黑树的高度至多为2lg(n+1)。
4、旋转:一种能够保持二叉查找树性质的查找树局部操作。红黑树的插入和删除会影响其性质,可以通过旋转操作来保持性质。5
5、插入:根据普通的二叉查找树进行查找,然后插入并将其着为红色,如果与父节点不存在冲突,也就是父节点时黑色就没什么问题。一旦发生冲突,然后考虑三种情况:
<1>如果叔节点也是红色:那么将祖父节点换成红色,然后叔父两节点换成黑色;再迭代的考虑祖父节点是否发生冲突。
<2>如果叔节点是黑色,且插入的节点是在父节点的左子树:那么考虑以父节点和祖父节点为轴心进行右旋,然后交换两个节点的颜色。
<3>如果叔节点是黑色,且插入的节点在父节点的右子树:那么考虑以父节点和祖父节点为轴心进行左旋,然后交换两个节点的颜色。
6、删除:删除红色节点没问题。

AVL树
一种高度平衡的二叉查找树,对每一个节点x,x的左子树和右子树的高度差至多为1。








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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值