• DS博客作业03--树


    0.PTA得分截图

    1.本周学习总结(0-5分)

    1.1 总结树及串内容

    BF算法,遍历整个串,直接遍历找到目标子串;
    KMP算法,实在没弄懂。
    二叉树:最多只有两个孩子。 完全二叉树,结点可以顺序排列。
    结构:

    typedef struct node
    {int data;
    struct node*lchild,*rchild;
    }BTNode;
    

    建法:
    先序建树:

    void Creat(BTree t,int n)
    { if(n>0)
     {
      cin>>num;
      t->data=num;
      Creat(t->lchild,n--);
      Creat(t->rchild,n--);
     }
    }
    

    顺序建树:

    void Creat(BTree t,int n[],int i)
    {
     if(n)
     {
      t->data=n[i];
      Creat(t->lchild,int n[],i*2);
      Creat(t->rchild,int n[],i*2+1);
     }
    }
    

    遍历:
    先序遍历:

    void pre(BTree t)
    {
     if(t!=NULL)
    {
     pre(t->lchild);
     cout<<t->data;
     pre(t->rchild);
    }
    }
    

    中序遍历:

    void pre(BTree t)
    {
     if(t!=NULL)
    {
     pre(t->lchild);
     cout<<t->data;
     pre(t->rchild);
    }
    }
    

    后序遍历:

    void pre(BTree t)
    {
     if(t!=NULL)
    {
     pre(t->lchild);
     pre(t->rchild);
     cout<<t->data;
    }
    }
    

    树的结构:由结点,叶子,根组成。一棵树去掉根就会变成很多棵树。同理很多棵树加上同一个根也会成为一棵树。
    结构: 孩子兄弟结构

    typedef struct node
    {
     int data;
     struct node*child,*brother;
    }BTNode;
    

    线索二叉树:遍历的方式,将树线索化,让结点拥有前驱和后继,除了头尾 两结点。
    哈夫曼树:给定叶子权重,组成的树带权路径WPL值最小。
    结构:

    typedef struct node
    { int data;
      int parent;
      int lchild;
      int rchild;
    }
    

    建树:
    数组 [2*n+1]
    从 parent 为-1的 数中 寻找最小两个建树,放入数组,同时修改parent 和 child 值,依次 建构。

    1.2谈谈你对树的认识及学习体会。

    建树的过程容易出现错误,难啊,树内容就可以结合队列,栈等一起应用。
    哈夫曼树和并查集没讲,不太懂。
    打代码的过程中,经常出现的问题都再建树的时候建不好,建树是最重要的一步,建错了,后面的操作都基于树,就会跟着错。
    建树时我老是会忘记忘记叶子之后的空结点处理问题。导致后面操作的时候会出现错误。pta上过得去,但是vs运行会有问题。
    串得KMP算法太难人了,搞不懂。脑子转不过来。

    2.阅读代码(0--5分)

    2.1 题目及解题代码


    2.1.1 该题的设计思路

    通过对比key 和结点值,进行左右子树的递归。若是找到与key相同的结点,删除结点,用左子根来取代。
    然后从右子树中寻找最小值来替代结点值。同时删除key。

    2.1.2 该题的伪代码

    if(key>t->data) 递归右子树。
    if(keydata) 递归左子树。
    if(key==t->data) 删除右子树,t=t->lchild;
    while (tmp->left) tmp = tmp->left,交换值,删除key。

    2.1.3 运行结果

    2.1.4分析该题目解题优势及难点。

    寻找结点,和删除结点的方法很新,没学过。。难道是我没看懂= = !

  • 相关阅读:
    Intellij IDEA 关闭阿里编码规约“请不要使用行尾注释”提醒
    VS 进行了无法编译的编辑
    IntelliJ IDEA lombok log 报红
    SQL Server 事务执行SQL
    Linux 检查应用不在现就重启
    Java入门5.2---String类、StringBuffer类、StringBuilder类、System类、Data类、SimpleDataFormat类、Calendar类、Math类、BigInteger类与BigDecimal类
    为什么要进行补偿
    解决flex布局中 space-between方法的排版问题
    桑基图的使用场景
    清蒸罗非鱼的做法和步骤
  • 原文地址:https://www.cnblogs.com/you-18250630840/p/12687656.html
Copyright © 2020-2023  润新知