树和二叉树

任意一颗(或者多棵)树转换成二叉树,右孩子为空得数目为原树非叶结点+1

例题:现有一个包含m个节点的三叉树,即每个节点都有三个指向孩子节点的指针,请问:在这3m个指针中有多少个空指针?
m个节点有3m个指针,m个节点的树有m-1个边,即有m-1个指针是指向节点的,剩下的就是空指针,3m-(m-1)=2m+1
二叉树遍历:前序遍历第一个数一定是根,中序遍历为排序结果,后序遍历最后一位是根。

二叉搜索树BST

查找 插入 删除(删除分三种情况:叶子节点、单支节点、左子树右子树均不为空)
1.叶子节点,直接删,修改其父节点的指针
2.单支节点(只有左子树或者右子树),将其子树与其父节点直接相连,删除
3.左子树右子树均不为空,找到其直接后继(右孩子的最左子孙,直接后继一定没有左子树),将直接后继的值赋值给要删除的节点,删除直接后继。

Huffman树

Huffman编码是一种无损压缩编码方案频率高德字符使用较短的编码,使得编码后的字符串长度期望最小。是一种贪心算法,每次总选择两个最小概率的字符节点合并。不等长编码,前缀编码:任何一个字符的编码都不是另外一个字符编码的前缀。Huffman编码不唯一。

B树

m阶B树需要满足:
每个节点至多有m个孩子,除根节点外,至少有m/2个孩子,根节点至少有两个孩子,所有叶节点都在同一层,有a个孩子的非叶节点有a-1个关键字,节点内部关键字递增排列。(联想:2-3-4树)
ps:树的阶数表示一个节点最多能有多少个子节点,也就是每个节点上最多的键值个数。比如二叉树的阶数就是2

B+树

非叶子节点不存储关键字信息,而是作为索引,叶子基点包含所有关键字信息,以及指向这些关键字记录的指针,叶子节点本身按照从小到大的顺序连接,适合范围查找。

平衡二叉树Balanced Binary Tree

在二叉搜索树上增加条件,每个节点的左右子树高度差不超过1,如果插入或者删除之后高度差大于1,则进行节点旋转,重新维护平稳状态。解决了二叉搜索树退化为链表的问题,插入、查找、删除的时间复杂度最坏、最好情况是O(logN)
旋转分为:左左、左右、右左、右右四种情况,左左-》顺时针旋转,左右和右左要经过两次旋转,右右逆时针旋转。

红黑树

相当于把2-3-4树转变为二叉树,节点抽取出来,新加的节点为红色,原来节点为黑色,对于任意节点,从它到叶子节点的所有路径上都有相同数目的黑色节点。放宽了平衡二叉树的平衡条件,基于颜色的平衡,简化平衡条件,降低旋转的要求,任何不平衡都能在三次旋转以内解决。红黑树的统计性能要好于平衡二叉树,这也是STL中map和set使用红黑树实现的原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值