树刷题题后感——相对来说概念和公式数量可以和数论比较__to be continue
在刷题的时候因为概念太多了越刷越懵所以先整理一下,基本就是错题,所以就不标颜色了,都看看。
题目来源:牛客网专项练习牛客网专项练习_校招题库练习题_行测题库考点考题 (nowcoder.com)
树:
参考链接:如何理解数据结构中树的度(树的度是什么意思)?-CSDN博客
(他这里打的“节点数“是指节点,建议忽略。但是我节点和结点是混淆的,我看到也有人混淆用了(目移))
关于树、森林、二叉树之间的转换:二叉树与树、森林之间的转换_二叉树转化为森林-CSDN博客 规则是对的,只是该链接作者图有的配错了。
(来自牛客网用户NII)
二叉树:
二叉树的基本性质:对于任何一棵二叉树,如果叶子结点个数为N0,度为2的结点个数为N2,则必然存在关系N0 = N2+1。
二叉树共有N个节点,求叶子节点数(就是度为0的结点)?N为偶数,叶子节点为N/2;N为奇数,叶子节点为N/2+1
树的遍历顺序:
参考链接:前序、中序、后续遍历二叉树 - 知乎 (zhihu.com)
前序遍历:根左右。
中序遍历:左根右。
后序遍历:左右根。
(记忆捷径是将“根”一直向右边挤,根左右,左根右,左右根)
相关图片我就不放了,对我来说只有这个顺序值得记。
例题:
(以下图片来自牛客网用户 武则天大人)
例题:
(我等会研究一下,我画不出来)只有前序序列和后序序列不能确定二叉树的结构,但是对于搜索树来说,只要知道前序遍历就可以了。
平衡二叉树:
参考链接:平衡二叉树(AVL)插入结点后的再平衡思路_avl树再平衡的方法-CSDN博客
简而言之,平衡二叉树是二叉搜索树的一个特例,节点的平衡因子是左右子树的高度差,所有节点的平衡因子均小于等于1则这颗树就是平衡二叉树。被破坏平衡的节点最近也是插入节点的爷爷结点。不可能找到插入节点使得父结点不平衡的情况。当插入了节点导致不平衡后可以通过节点的旋转使得树再平衡。二叉搜索树中节点的旋转不会破坏二叉搜索树的规则。
然后就是如何命名不平衡树的?左左(LL)型意思是从插入结点开始,需要往左上走两次才能到不平衡节点,其他同理。
旋转的方法在原链接有说。以下的图片中x是不平衡节点。
(⬇虽然我通过画图也可以做出来,关于平衡二叉树结点和高度的关系,但是我找到网友评论,貌似是有规律的)
完全二叉树:
参考链接:常见数据结构——完全二叉树(定义、特征、节点个数的判断以及C++简单实现)-CSDN博客
完全二叉树是由满二叉树而引出来的,若设二叉树的深度为h
,除第 h 层外
,其它各层 (1~h-1) 的结点数都达到最大个数(即1~h-1层为一个满二叉树)
,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。
完全二叉树,有左子树不一定有右子树,有右子树一定有左子树,叶子节点只能出现在倒数第一和倒数第二层,适合于顺序结构存储。
完全二叉树中,度数为1的节点个数是1或0,可以结合二叉树的三个节点公式(二叉树那里讲了)
关于完全二叉树中结点个数参考链接:完全二叉树叶子节点、度为1节点、度为2节点的个数关系_叶子节点数和度的关系-CSDN博客,看结论1,3可以知道,如果是偶数的话选择第一个公式,如果是奇数的话选择第二个公式。
在链接中解释了完全二叉树的k(深度)的取值范围,嗯,牛客网有人给出了更好的公式。具有n个结点的完全二叉树(包括满二叉树)的高度为【log2 n】+1 或者(【log2 (n+1 )】)【log2 n】+1中的【】是向下取整,【log2 (n+1 )】中的【】是向上取整
例题:很容易写错:
哈夫曼树:
参考链接:超好理解的哈夫曼树(最优二叉树)与例题_哈夫曼树的构造例题-CSDN博客
虽然有人说这篇博客的哈夫曼树建错了,但是我看不出来(我觉得蛮对的),不过原理是正确的。
哈夫曼树又被称为二叉最优树。
n个叶子的哈夫曼树要经过n-1次合并,产生n-1个新结点。则哈夫曼树有2n-1个结点。
Huffman 树的带权路径长度WPL等于 各叶子结点的带权路径长度之和,权值较大的靠近根节点。
哈弗曼树可以通过在优先级队列中的插入和移除操作来创建(这个就没有必要解释了)
哈夫曼编码:哈夫曼编码和解码都是从根节点到叶子节点的
哈夫曼编码过程:字符串“AAAABBBBBCCDDDDDDE”,字符出现的频率为
编码就是从根节点开始,往左走就是0,往右走就是1
最终字符编码为:
二叉搜索树:
二叉排序树,也称二叉搜索树,特点是 左子树的节点值 < 根节点值 < 右子树的节点值。所以最小值的左子树为空。注意,由于树其实是递归结构(),所以这里的规则同样也适用子树。
参考链接:数据结构——二叉搜索树详解-CSDN博客
(下面这道题我已经想不出来当时是怎么做的,到最后看错题的时候脑子还是有点转不过来)
线索二叉树:
(来自牛客网用户 ryanxw)
B树:(老朋友了)
(以下来自牛客网用户 ICANTHEARYOU)
这里的(1)修改成:结点最多有m-1个关键字m个分支。
因为节点和结点有的时候大家不注意就会混淆,所以修改一下,他指的节点应该是一个大结点分成几块,也就是关键字。
例题:
解析其实有点啰嗦了,至多,所以每一个结点最多m个分支,所以分支个数是1+3+9+27+81 , 每个结点最多有m-1个关键字,所以分支数量*(m-1) 得出242。
红黑树:
(写这个主要是因为一道题,问谁是二叉树)
B树是一种平衡的多叉树
B+是一种多路搜索树
AVL是平衡二叉树
红黑树也是一种二叉树
参考链接:红黑树深入剖析及Java实现 - 美团技术团队 (meituan.com)
一道杂题:(写这道题目的时候脑袋空空的随便选了一个)
to be continue.(2024-05-14 ,再做类似的题我要疯了,先缓一会,做点别的)
本文作者:程序计算机人
本文链接:https://www.cnblogs.com/clina/p/18190393
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步