• 第五章小结


    这一章我先来讲一下我实践第二题的思路

    先是基本结构体

    typedef struct{
        int doors;//门的数量 
         int *p;//p指向具体门的编号,把p看作是一个整型数组 
     }node;

    再是主要函数

    int main(){
        node *a;
        int i,j,k,root;
        root = input(a);
        cout<< find(a,root)<<endl;
        return 0;
    }

    然后处理输入的数字

    int input(node *&a)
    {
        int n,x,i,j;
        bool *vi;
        cin>>n;
        a=new node[n+1];
        vi=new bool[n+1];
        for(i=1;i<=n;++i)
        vi[i]=false;
        
        for(i=1;i<=n;++i)
        {
            cin>>x;
        a[i].doors=x;
        a[i].p = new int[x];
        for(j=0;j<x;++j){
        
        cin>>a[i].p[j];
        vi[a[i].p[j]]=true;
        }
    }
    //找出根在a数组的下标 
    for(i=1;i<=n;++i)
    if(!vi[i])break;
    return i;
    }

    然后再查找出最末尾的叶子结点

    int find(node *a, int root)
    {
        //从a数组的下标开始,往下搜索
        queue<int>q;//定义用于待访问的门编号的队列
        //根编号入队
        q.push(root);
        int x,i;
        //当队列不为空
        //x=出队
        //x后面的门编号入队
        while(!q.empty()){
            x=q.front ();
            q.pop();
            for(i=0;i<a[x].doors;++i)
            q.push(a[x].p[i]);
        } 
        return x;
    }

    在解决这道题的时候,我有一个地方老是错误一开始我并没有觉得我的代码哪里有错,但是再请教了班里的其他同学之后,发现是一个很小很小的错误,主要是自己过于粗心,j的范围是小于x,而不是小于等于x,把这里改了之后,所有的测试点就都对了。

    整个第五章主要讲树。

    树的遍历主要分为

    1、先序遍历(根,左孩子,右孩子)

    2、中序遍历(左孩子,根,右孩子)

    3、后序遍历(左孩子,右孩子,根)

    树的存储则可以分为结构、顺序存储、链式存储三个部分来说,结构又可分为双亲、孩子、孩子兄弟三种表示法。

    另外在这一章的最后,我们还学习了哈夫曼树。

    对于自己的目标,就是在处理代码时不够精致,有点粗心,代码的结构还不够精简。

    简单来说,就是多看,多打,少休息。

  • 相关阅读:
    vbscript 语言通过序列和ADODB实现取号不重复
    arcgisserver成功发布服务后,浏览服务,无地图显示
    GUID的获取
    EasyUi 表格自适应宽度
    接口隔离原则
    依赖倒置原则
    开放封闭原则
    单一职责原则
    python-函数基础
    python -流程控制
  • 原文地址:https://www.cnblogs.com/Lnnnn/p/10810105.html
Copyright © 2020-2023  润新知