数据结构理解总结

快就是慢,慢就是快。
勉励自己不要急于求成,享受人生,享受过程。

AVL树

1.怎么定义AVL树?

它必须是二叉查找树。
(二叉查找树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。二叉搜索树作为一种经典的数据结构,它既有链表的快速插入与删除操作的特点,又有数组快速查找的优势;所以应用十分广泛,例如在文件系统和数据库系统一般会采用这种数据结构进行高效率的排序与检索操作。)
每个节点的左子树和右子树的高度差至多为1。

2.AVL树如何插入一个节点
若AVL树为空,则插入的节点就是根节点,若AVL树不为空,则和根节点比大小,若小于根节点则放在左子树,若大于根节点则放在右子树。如此循环往复。(此处先不考虑旋转)

3.AVL树如何删除一个节点
删除分为三种情况
第一种就是叶子节点,最为简单,直接清除父节点对其的引用即可。
第二种就是只有一个子节点的,首先要找到该节点的父节点,然后确定该节点的子节点是该节点的父节点的左子树还是右子树。确定好之后把子节点的引用交给父节点即可。
第三种就是有两个子节点的,首先要找到比该节点大的最小节点(也就是右子树的最小节点),然后用这个最小节点替换掉该节点,并且删除掉最小节点。

4.AVL树平衡调整
LL:
将A的左孩子B提升为新的根结点;
将原来的根结点A降为B的右孩子;
(BL和AR不变,BR调整为A的左子树)。
RR:
LR:
RL:

红黑树

1.怎么定义红黑树?
性质1:每个节点要么是黑色,要么是红色。
性质2:根节点是黑色。
性质3:每个叶子节点(NULL)是黑色。
性质4: 不能出现两个相连的红色节点。
性质5: 每条路径上的黑色节点个数一样。

2.怎么删除/插入一个元素
为了满足性质5、所以插入的节点是红色,然后在左旋/右旋/变色达到平衡
删除节点和AVL树有相似之处

二叉堆

1.怎么定义二叉堆?
二叉堆一般用数组表示,分为最大堆和最小堆,比如最小堆每个子节点都要比父节点小。

2.怎么插入一个元素?
插入元素的时候,先把元素放在最后(最右叶子),然后根据(n-1)/2找到父节点,循环比较交换,直到找到最终位置。

3.怎么删除一个元素?
删除的时候肯定要删除堆顶元素,因为这个数据结构就是为优先队列而生的。
先把堆顶和最右叶子(最后一个元素)交换,然后删除最后一个元素,这时候堆顶元素是不符合二叉堆要求的。根据公式2n + 1和2n+2和子节点反复交换比较。直到找到自己的最终位置。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值