在刷题的时候因为概念太多了越刷越懵所以先整理一下。
题目来源:牛客网专项练习牛客网专项练习_校招题库练习题_行测题库考点考题 (nowcoder.com)
树:
参考链接:如何理解数据结构中树的度(树的度是什么意思)?-CSDN博客
(他这里打的“节点数“是指节点,,意思就是上图表示的,但是我节点和结点是混淆的,我看到也有人混淆用了(目移))
关于树、森林、二叉树之间的转换:二叉树与树、森林之间的转换_二叉树转化为森林-CSDN博客 规则是对的,只是该链接作者图有的配错了。(来自牛客网用户NII)
二叉树:
二叉树的基本性质:对于任何一棵二叉树,如果叶子结点个数为N0,度为2的结点个数为N2,则必然存在关系N0 = N2+1。
二叉树共有N个节点,求叶子节点数?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 层所有的结点都连续集中在最左边,这就是完全二叉树。
完全二叉树,有左子树不一定有右子树,有右子树一定有左子树,叶子节点只能出现在倒数第一和倒数第二层,适合于顺序结构存储。
完全二叉树中,度数为0的节点个数比度数为2的节点个数多1,且度数为1的节点个数是1或0,可以结合二叉树的三个节点公式(二叉树那里讲了)
在链接中解释了完全二叉树的k(深度)的取值范围,嗯,牛客网有人给出了更好的公式。具有n个结点的完全二叉树(包括满二叉树)的高度为【log2 n】+1 或者(【log2 (n+1 )】)【log2 n】+1中的【】是向下取整,【log2 (n+1 )】中的【】是向上取整
哈夫曼树:
参考链接:超好理解的哈夫曼树(最优二叉树)与例题_哈夫曼树的构造例题-CSDN博客
虽然有人说这篇博客的哈夫曼树建错了,但是我看不出来(我觉得蛮对的),不过原理是正确的。
哈夫曼树又被称为二叉最优树。
Huffman 树的带权路径长度WPL等于 各叶子结点的带权路径长度之和
哈夫曼树是一种特殊的完全二叉树。所以完全二叉树的公式都可使用。
二叉搜索树:
二叉排序树,也称二叉搜索树,特点是 左子树的节点值 < 根节点值 < 右子树的节点值。所以最小值的左子树为空。注意,由于树其实是递归结构(),所以这里的规则同样也适用子树。
参考链接:数据结构——二叉搜索树详解-CSDN博客
线索二叉树:
参考链接:线索二叉树(图解+完整代码)-CSDN博客
(来自牛客网用户 ryanxw)
B树:(老朋友了)
参考链接:图解B树的原理及操作_b树原理详解-CSDN博客
(以下来自牛客网用户 ICANTHEARYOU)
一道杂题:(写这道题目的时候脑袋空空的随便选了一个)