本文总结了树结构的学习要点,包括建树方法、遍历技巧,并通过具体实验如表达式树构建、后序与中序遍历转换及二叉树层次遍历等加深理解。同时分享了学习过程中遇到的问题及解决办法。

1.学习总结(2分)

1.1树结构思维导图 使用思维导图将树结构的知识点串在一起。树中的每个知识点需细化到每个操作如何实现。

1232310-20180512232058804-791945938.png

1.2 树结构学习体会谈谈你对树结构认识,学习这个结构是否遇到哪些困难及树结构可以解决的问题。

1.树的内容很多也很杂,首先是建树,一种是利用队列辅助建树,一种是递归法建树,然后是遍历树,分递归遍历和非递归遍历,其中又分为先中后序遍历,然后是线索树,哈夫曼树的创建和遍历,表达式树的创建和求值,加起来至少有14种代码,是所有章节中最多的。运用树可以解决高效编码的问题,比如哈夫曼树,老师以前也说过阿尔法狗也是用树的结构写的,就是树可以写一些棋牌类游戏,树还可以帮计算机进行计算用树的结构进行查找也是很高效的;

2.PTA实验作业(4分)

2.1 题目1:6-4 jmu-ds-表达式树(25 分)

2.2 设计思路(伪代码或流程图)

构造表达式树是看老师的模板写的

1232310-20180512233643652-922750224.jpg
计算表达式

定义a和b分别表示左子树的值和右子树的值
递归出口是当T为NULL时,返回0;
switch 
当T为+时返回a+b
当T为-时返回a-b
当T为*时返回a*b
当T为/时如果分母为0返回错误,否则返回a/b

2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)

1232310-20180512234600211-743074627.jpg
1232310-20180512234622839-1485639984.jpg

2.4 PTA提交列表说明。

  • 1.忘记把'#'压入栈底,导致运算符无法进入栈
    1232310-20180512234924256-1394619236.jpg
  • 2.定义B时没有给B的左右孩子指向导致段错误
    1232310-20180512235103801-1321564043.jpg

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

    2.2 设计思路(伪代码或流程图)

根据后序和中序建树
创建根节点
在中序遍历中找到根节点的位置
递归构造左子树
递归构造右子树
递归出口是子树中的结点个数为0时
先序遍历
访问根节点
递归访问左子树
递归访问右子树

2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)

1232310-20180513124114013-397546510.jpg
1232310-20180513124128861-1219235436.jpg

2.4 PTA提交列表说明。

1232310-20180513131810736-1401520582.jpg
这题主要错误是把数字数组当字符串来写,可能是字符串的写多了,一开始写数字数组的输入代码时脑袋是一片空白的,后面才慢慢回想起来,数字数组一定要事先知道数组长度;
1232310-20180513124536110-136294723.jpg

2.1 题目3:7-3 jmu-ds-二叉树层次遍历(25 分)

2.2 设计思路(伪代码或流程图)

递归法构建树
建根节点,数值为数组中第i个数值
左子树与根节点位置的关系是2*i,递归构建左子树
右子树与根节点位置关系是2*i+1,递归构建右子树
递归出口是i>len-1和str[i]=='#'
返回根节点
层次遍历
初始化队列
将根节点入队
while to 队列为空
访问队首元素
队首元素左孩子不为空就让左孩子进入队列
队首元素右孩子不为空就让右孩子进入队列

2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)

1232310-20180513130617194-298440780.jpg
1232310-20180513130629724-363171062.jpg

2.4 PTA提交列表说明。

  • 1.这题主要是太马虎;
    1232310-20180513131735545-476646651.jpg

    3.截图本周题目集的PTA最后排名(3分)

    1232310-20180513132930630-2129020965.jpg

    3.2 我的得分:1分

    4. 阅读代码(必做,1分)

    家谱处理
    1232310-20180513134007131-1693033154.jpg
    1232310-20180513134023439-1251545777.jpg
    1232310-20180513134036210-1464485593.jpg
    1232310-20180513134046667-948765480.jpg
    一开始想每个节点用vector记录孩子来着,发现好难弄,后面灵光一闪,想到可以记录父亲啊,每个节点就只有一个父亲呀,这样我们就能递归的处理了。就是说对于当前节点,我们可以先处理完孩子,遇到孩子的孩子,先处理孩子的孩子,处理完继续回来处理。然后就想到了递归,具体的看代码更容易理解一些。
    得到父亲就好做多了。然后递归的时候顺便给节点标号就OK了。

    5. 代码Git提交记录截图

    1232310-20180513144439483-1643090185.jpg

转载于:https://www.cnblogs.com/guoruiqian/p/8858517.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值