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

    1.本周学习总结

    1.思维导图

    2.本周学习总结

    学习了树结构之后,总体感觉比之前的两种结构,线性和栈队列都要复杂,因为树形结构的实现方法不是唯一的,可以用到链式结构,也可以用到递归操作。在学习递归的时候,需要明确递归口和递归传入的参数,刚开始学习的时候,这两块地方总是会不清楚。结构体也是树必不可少的,需要明白什么时候需要兄弟节点,什么时候需要的是左右孩子节点,这个也是一个需要明确的地方。建树以及各种需要的函数得在主函数中串联起来,函数中需要的变量也要在主函数中声明,BTree bt这个指针需要动态分配内存。总的来说,树结构还是需要多看视频和多做题才会有感觉。

    2.PTA实验作业

    2.1.题目1:

    7-3 jmu-ds-二叉树层次遍历 (25 分)
    层次遍历树中所有节点。 输入一行字符串表示二叉树的顺序存储结构,比如字符串“#ABCD#EF#G##H##I”,#代表空节点。第一个#不使用。

    2.1.1设计思路

    2.1.2代码截图





    2.1.3本题PTA提交列表说明。



    ·Q1:第一次的错误在于对输出没有注意到,也就是PreOrder其实是个没有用的函数
    ·A1:把主函数中的PreOrder注释掉
    ·Q2:第二次错误在于遍历的那个函数没有使用两个指针,我以为一个就够了,没想到在后面逐层遍历的时候出问题了
    ·A2:定义两个指针,直接把树用另外一个栈进行操作

    2.2 题目2:

    7-4 jmu-ds-二叉树叶子结点带权路径长度和 (25 分)
    二叉树叶子结点的带权路径长度指:叶子结点的权重路径长度。本题要求算出二叉树所有叶子结点的带权路径长度和。 如下面的二叉树:

    2.2.1设计思路

    2.2.2代码截图


    2.2.3本题PTA提交列表说明。


    ·Q1:第一次的答案错误是因为wpl函数里面的递归无法直接使用lchild和rchild vs提出错误
    ·A1:在主函数和wpl函数中都声明了一下发现没有改变问题 就暂时没去动这个问题
    ·Q2:检查完程序之后发现主函数中函数调用传参出了问题 应该把1传进去而不是n
    ·A2:修改之后进行提交 直接就过了 第一个问题看起来不是大问题 但是不知道为啥vs报错了

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

    本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。

    2.3.1设计思路

    2.3.2代码截图


    2.3.3本题PTA提交列表说明


    ·Q1:第一次错误的原因是宏定义数组的时候类型声明错误 定义成char类型的了后面输入的时候就有问题
    ·A2:改变了定义类型 使用整型输入
    ·Q2:第二次错误是格式错误 在最后输出的时候多出了一个空格
    ·A2:调整一下输出

    3、阅读代码

    3.1 题目

    有一棵二叉树,树上每个点标有权值,权值各不相同,请设计一个算法算出权值最大的叶节点到权值最小的叶节点的距离。二叉树每条边的距离为1,一个节点经过多少条边到达另一个节点为这两个节点之间的距离。
    给定二叉树的根节点root,请返回所求距离。

    3.2 解题思路

    这道题的解题较为麻烦,分作两大步骤
    1 标记每个节点的父节点,并且找出最大叶节点和最小叶节点
    用map<int,pair<int,int>>标记每个子节点的父节点,first是子节点值,second是<父节点值,父节点位置>
    用queue遍历二叉树的节点
    依次把每个父节点的子节点push进队列,每取出一个节点处理,计数加1,然后处理取出节点的左右孩子进行标记
    处理完之后,把取出的节点pop出去
    2 计算两个叶节点的最短路径
    分别找出两个叶节点到树根的路径,公共部分以前的路径相加即最短路径

    3.3 代码截图




    3.4 学习体会

    没想到孰能解决的问题这么多,这道题看起来不是很难,只要找出权值最大的节点和权值最小的叶节点,然后在计算他们之间的距离。但是实际操作起来的话,首先找权值的问题是要先遍历一遍整棵树,把权值记录下来,然后进行比较找出两个节点,然后在进行遍历,便利的同时记录下来路径,存放好路径之后再使用一个函数进行计算路径。这道题用了很多的书的操作,创建左右子树,遍历子树,然后就是栈和队列的操作,很值得学习和深思。

  • 相关阅读:
    java数组
    java 常用类
    java 集合(一)
    mysql相关操作(一)
    记录java BigDecimal
    hxg-yw
    一个困惑我好久的问题
    关于重载和重写的一些小知识
    几个常用的HTTP状态码
    死锁产生的原因和条件简述
  • 原文地址:https://www.cnblogs.com/lw123---/p/10886146.html
Copyright © 2011-2022 走看看