2024-05-14 02:10阅读: 15评论: 0推荐: 0

树刷题题后感——相对来说概念和公式数量可以和数论比较__to be continue

  在刷题的时候因为概念太多了越刷越懵所以先整理一下,基本就是错题,所以就不标颜色了,都看看。

  题目来源:牛客网专项练习牛客网专项练习_校招题库练习题_行测题库考点考题 (nowcoder.com)

  

  树:

    参考链接:如何理解数据结构中树的度(树的度是什么意思)?-CSDN博客  

 

     (他这里打的“节点数“是指节点,建议忽略。但是我节点和结点是混淆的,我看到也有人混淆用了(目移))

    关于树、森林、二叉树之间的转换:二叉树与树、森林之间的转换_二叉树转化为森林-CSDN博客 规则是对的,只是该链接作者图有的配错了。

 

 

 

 (来自牛客网用户NII)

 

 
    逻辑结构是数据元素之间的关系,存储结构是数据元素及其关系在计算机中的存储方式。
    存储结构有顺序、链式、索引、散列四种,逻辑结构有线性和非线性结构。
    二叉树是逻辑结构,树属于逻辑结构中的非线性结构。
    双向链表、哈希表、循环队列都是存储结构分别属于链式、散列和顺序。逻辑结构是数据元素之间的关系,存储结构是数据元素及其关系在计算机中的存储方式。
    存储结构有顺序、链式、索引、散列四种,逻辑结构有线性和非线性结构。
    二叉树是逻辑结构,树属于逻辑结构中的非线性结构。
    双向链表、哈希表、循环队列都是存储结构分别属于链式、散列和顺序。
    树只是表现数据的层次关系,不是一种存储结构,通常使用链表来存储树结构
 
 

  二叉树:

    二叉树的基本性质:对于任何一棵二叉树,如果叶子结点个数为N0,度为2的结点个数为N2,则必然存在关系N0 = N2+1。

    二叉树共有N个节点,求叶子节点数(就是度为0的结点)?N为偶数,叶子节点为N/2;N为奇数,叶子节点为N/2+1

    上面的链接讲到了几个公式: n = n0+n1+n2 = 总度数+1 = 2n2+n1+1,总度树是所有结点度数之和。
    n表示树的结点个数,n0表示度为0的结点的个数,n1表示度为1的结点的个数,n2表示度为2的结点的个数。
    在任意一棵二叉树(“度”最高为2)中, 度为0的结点(叶子结点)总是比度为2的结点多一个 。(也就是我写的第一条基本性质)
    完全二叉树的高度最小是log(n),所以普通二叉树高应该大于等于log(n)

  树的遍历顺序:

    参考链接:前序、中序、后续遍历二叉树 - 知乎 (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”,字符出现的频率为

      A4,B5,C2,D6,E1
      构建哈夫曼树

       编码就是从根节点开始,往左走就是0,往右走就是1

       最终字符编码为:

      A:01
      B:10
      C:001
      D:11
      E:000
    解码也是使用上面的哈夫曼树来,从根节点开始,遇到0就往左走,遇到1就往右走,走到叶子节点就是该字符了,完成一个字符解码,下一个字符解码又从根节点开始走。

     

  二叉搜索树:

    二叉排序树,也称二叉搜索树,特点是 左子树的节点值 < 根节点值 < 右子树的节点值。所以最小值的左子树为空。注意,由于树其实是递归结构(),所以这里的规则同样也适用子树。

    参考链接:数据结构——二叉搜索树详解-CSDN博客

    (下面这道题我已经想不出来当时是怎么做的,到最后看错题的时候脑子还是有点转不过来)

 

 

  线索二叉树:

    参考链接:线索二叉树(图解+完整代码)-CSDN博客

 (来自牛客网用户 ryanxw)

   B树:(老朋友了)

    参考链接:图解B树的原理及操作_b树原理详解-CSDN博客

  (以下来自牛客网用户 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 中国大陆许可协议进行许可。

posted @   程序计算机人  阅读(15)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 Lions Pride Audio artist
  2. 2 Salty Sailor David Arkenstone
  3. 3 Stonefire David Arkenstone
Lions Pride - Audio artist
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

Not available