• DS博客作业05--树


    1.本章学习总结

    1.1思维导图

    1.2.谈谈你对树结构的认识及学习体会:

    树就是非线性数据结构,相对于之前所学的所有知识来说,树与二叉树的难度要高于之前所学的知识。孩子树,双亲树,孩子兄弟树,二叉树,这些都是重点。
    关于树的学习,树的基本术语,树的性质,这些都是我们需要去记得东西。尤其是学习树,还要懂得如何去画树,画图软件也是我们需要学习的。
    

    2.PTA实验作业

    2.1.题目1:题目名称(编程题)

    6-4 jmu-ds-表达式树 (25 分)

    2.1.1 设计思路

    建栈 初始化:stacktree栈
    while(表达式未结束)
          if(ch==操作数)
               生成一个只有根结点的子树T   
          if(ch==运算符)
                     while(ch<op栈顶运算符)  栈顶优先级高,则
                             创建一个树结点T,数据为op.top()
                             stacktree弹出2个根结点T1,T2
                             T->lchild=T1,T->rchild=T2
                             stacktree.push(T)
                             if(ch>op顶运算符) op.push(ch)
                             if(ch==op顶运算符)  则op.pop()
    if(T不为空)
         then
             if(左右子树不为空)
                   then 返回对应数值
             递归左右子树得到a,b
             switch(结点值)
                   对应符号计算 返回值 
                          if(除数为0)
                               then 输出错误
                               else  a/b
    

    2.1.2代码截图

    2.2.3本题PTA提交列表说明

        Q1:在写因为switch部分忽略了break导致部分正确
    

    2.2.题目1:题目名称

    7-4 jmu-ds-二叉树叶子结点带权路径长度和 (25 分)

    2.2.1 设计思路

        首先定义结构体用于储存二叉树 
    BinTree CreateBTree(string str, int i, int h);  
    定义函数 wpl(BinTree T);     求和、 
    
    BinTree CreateBTree(string str, int i, int h)
    {
        if i < 0 且 i >= length   do 
           返回 NULL;
        end if 
        if str[i] == '#'
           返回 NULL;
        end if 
        定义结构体变量 t,并赋予空间;
            用来储存二叉树 
        返回 t;
    }
    int wpl(BinTree T)
    {
        if     BT == NULL 
            返回 0;
        end if 
        if BT->left == NULL 且 BT->right == NULL
            返回 ((BT->data - '0')*BT->high);
        end if 
        返回 (wpl(BT->left) + wpl(BT->right));
    }
    

    2.2.2代码截图

    2.2.3本题PTA提交列表说明

        Q1:在树的建立上出现了错误
    

    2.3.题目1:题目名称

    7-1 还原二叉树

    2.3.1设计思路(伪代码)

    main
        定义n ch a[MaxSize],b[MaxSize] ,T
        T=ReturnTree(a,b,N);
        输出 GetHight(T)
    BTree ReturnTree
        if(length==0)   return NULL
        建立T的节点空间
        T->data=*b
        for(i=0;i!=length;i++)
        T->lchild=ReturnTree(a,b+1,i);
        T->rchild=ReturnTree(a+i+1,b+i+1,length-i-1);
         返回T
    int GetHight
        定义l, r;
        if(BT==NULL)
            返回0
        l=GetHight(BT->lchild);
        r=GetHight(BT->rchild);
        返回结果 (l>r?l+1:r+1)
    

    2.3.2代码截图


    2.3.3本题PTA提交列表说明

        Q1:建树的递归有一些问题,最开始直接运用T->lchild=CreatTree( s, 2 * i)这个,但是建的不对,最后借鉴了一下别人的方法,改正了一下
    

    3.栈和队列上机考试错题及解决办法(-3--3分)

    3.1.错题1

    树上机考试--网络18 7-2 jmu-ds-输出二叉树每层节点

    3.2.错误代码实例:

    错误代码



    3.3.分析错误原因及体会

    二叉树为空的情况漏考虑了,要考虑这个只要在刚开始入队情况下加上判断队列为空的条件即可解决;关于树的学习上,从遍历最基础的开始,树的很多操作都要用到递归,而递归是一件让人很头疼的事,在遇到递归函数时,经常会出现混乱,
  • 相关阅读:
    解决:信息中插入avi格式的视频时,提示“unsupported video format”
    java字节数组和16进制之间的转换
    16进制转换字节数组工具类
    如何在ubuntu 12.04 中安装经典的 GNOME桌面
    Ubuntu安装软件提示”需要安装不能信任的软件包”解决办法
    Ubuntu系统下运行Eclipse出现找不到jre的问题的解决方法
    ubuntu添加共享出错
    从scrapy使用经历说开来
    有趣的问题--12 coins problem
    一个奇怪的MySQL错误返回
  • 原文地址:https://www.cnblogs.com/jellysheep/p/10886908.html
Copyright © 2020-2023  润新知