zoukankan      html  css  js  c++  java
  • DS博客作业05--树

    1.本周学习总结

    1.思维导图

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

    相对于之前的栈和队列,树的学习难度明显. 相较于之前的线性结构, 树更多的需要应用递归思维. 循环结构用多了之后, 对于转变到递归难以适应, 考虑问题的方式也改变了
    树表示数据表素之间一对多的关系,可以分为二叉树(完全二叉树、满二叉树、平衡二叉树、排序二叉树),红黑树,哈夫曼树等等,遍历的顺序也有很多种:中序遍历,
    先序遍历、后序遍历、层次遍历等等(每一种我们都要掌握),分类较多,应用的范围也很广.
    

    2.PTA实验作业

    2.1题目一:6-2 中序输出度为1的结点

    2.1.1设计思路(伪代码)

    由题目中序输出可知,先左子树,再根,在右子树
    If T!=NULL //树不为空
    递归遍历左子树
    If 右子树==NULL 且左子树!=NULL 或者 左子树==NULL且右子树!=NULL
    输出 
    

    2.1.2代码截图

    2.1.3提交列表及说明


    if的判断条件出错

    2.2题目二:7-1 还原二叉树

    2.2.1 设计思路

    int Height(int num1,int num2,int lenth,int H)
    if lenth == 0 
        返回 H-1;
        int len = 0;
        while(1)
    	{
            if  Str2[num2+len] == Str1[num1]
    		break;
           
               len++;      
        }
         应用递归算法
        int h1 = Height(num1+1,num2,len,H+1);   返回左子树最大高度 
        int h2 = Height(num1+len+1,num2+len+1,lenth-1-len,H+1);  返回右子树最大高度
     
        返回高度
    

    2.2.2代码截图


    2.2.3本题PTA提交列表说明

    2.3 题目3:7-2 根据后序和中序遍历输出先序遍历 (25 分)

    2.3.1 代码思路

    void preorder(int a[], int b[], int n)
    if n不为0
        后序遍历的最后一个元素为根
        for i=0 to n
            if b[i]=根 then m=i为根在中序遍历中的位置
        输出元素
        递归调用本函数
    

    2.3.2 代码截图


    2.3.3 提交列表

    3.阅读代码

    3.1 题目 计算一棵树的宽度(并输出每一层的宽度)

    3.2 解题思路

    作者解题思路:
    先创建一个队列,用一个标注变量去标注最开始时队尾的位置,然后用一个循环来操作二叉树,循环体内的操作和层序遍历类似,不同的是,在每趟循环结束后都要来判断上一层是否便利完成(用那个标注变量和队首的位置比较)如果便利完成,则刷新最大宽度。
    

    3.3 代码截图


    3.4 学习体会

    通过此题,加成了对于层次遍历的做法,相对于前中后序遍历来说,层次遍历需要用队列辅助实现,对于代码的操作多了许多

  • 相关阅读:
    luogu 2478 [SDOI2010]城市规划 仙人掌上dp.
    bzoj 3782 上学路线 卢卡斯定理 容斥 中国剩余定理 dp
    bzoj 3790 神奇项链 回文串 manacher|PAM
    4.4 相交弧 容斥 平衡规划 二维数点
    4.4 省选模拟赛 拉格朗日计数 树状数组+容斥.
    4.4 省选模拟赛 修路 斯坦纳树
    带修改线性基
    CF R 630 div2 1332 F Independent Set
    4.3 省选模拟赛 石子游戏 树上博弈
    机器C盘临时区
  • 原文地址:https://www.cnblogs.com/cfjblog/p/10887088.html
Copyright © 2011-2022 走看看