zoukankan      html  css  js  c++  java
  • 第五章小结

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

    先是基本结构体

    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、后序遍历(左孩子,右孩子,根)

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

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

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

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

  • 相关阅读:
    c#中using System.Runtime.Serialization.Json;不能引用
    VS2013 当前不会命中断点还未为文档加载任何符号
    windows2008 设置会话超时时间
    服务没有及时响应启动或控制请求 1053
    IIS装好了无法访问localhost
    Shiro笔记——简介、 架构分析
    Java 连接使用 Redis
    Java 连接操作 Redis 出现错误
    网络方面的常用命令 & 常用端口介绍
    Redis 配置文件及命令详解
  • 原文地址:https://www.cnblogs.com/Lnnnn/p/10810105.html
Copyright © 2011-2022 走看看