码迷,mamicode.com
首页 > 其他好文 > 详细

博客作业04--树

时间:2018-05-05 20:42:19      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:遍历   节点   tree   所有结点   inf   输出   类型   info   运算   

1.学习总结

1.1树结构思维导图

1.2树结构学习体会

2.PTA实验作业

2.1题目一:表达式树

2.2设计思路

**建树**
创建一个char类型存放逻辑运算符的栈op和一个BTree类型存放数字的栈st
创建BTree类型的结bt和leaf
先将#入栈
遍历str函数
    如果为数字
        为叶子结点leaf申请空间,并将str的值赋予它,同时将它入到st栈中
    如果为逻辑运算符
        先判断op栈顶运算符和str运算符优先级大小
        若op大,则将op栈和st栈出栈,并将栈op字符作为双亲、栈st的数字遵循先右再左的顺序建树
        若op小,则继续入栈
        若遇到括号匹配,优先出栈
将op栈剩余的运算符全部出栈
    方法同上,先右再左的原则建树
最后将栈st顶的字符赋予T,作为其根节点
        
**计算**
创建BTree类型的栈s存放T的所有结点
创建double类型的栈result存放计算结果
后序遍历树T,遇到运算符,出栈左右孩子结点作相应的逻辑运算操作,得出的结果覆盖原本运算符的位置
遍历到树空时,返回栈result顶的值,即为表达式的值

2.3代码截图

技术分享图片
技术分享图片
技术分享图片
技术分享图片
技术分享图片

2.4PTA提交列表截图

技术分享图片
基本没有什么大问题,就是按照上课说的方法来写代码,交的时候多交了一些函数导致编译错误

2.2题目二:修理牧场

2.2设计思路

申请一个优先队列q
    输入木头要切成的段数n和每段的长度m
将m压入优先队列q
    每次取最小两个数出队,相加之后再入队
    sum记录每次两个权值最小的数相加之和
出队到队列q为空,再输出sum即为最小花费

2.3代码截图

技术分享图片

2.4PTA提交列表截图

技术分享图片
编译错误是因为队列q去栈顶函数top没括号导致
ps:用优先队列做的复杂度远比用树做低,而且更加简单易懂

2.3题目三:二叉树叶子结点带权路径长度和

2.2设计思路

**建树:**
建立BTree类型的栈q
建立BTree类型的树T
直接从第二个数开始判断是否为#号
    若为#号,则该树为空树
否则创建新的左右孩子节点,将数组str[1]的值赋予树T根节点,并将BT入队
while(队列q不为空)
    T取q队头后将其出队
    如果T不为空树,构建左子树,并将左节点入到队q
    当左结点构建完毕,如果T不为空树,构建右子树,并将右节点入到队q 
    当数组str遍历完毕后退出循环   

**计算wpl:**
设置静态局部变量sum存放wpl的值
    如果BT不为空树且遍历到叶子结点
    sum的值为上次sum的值加上当前结点权值BT->data*结点深度weight
    递归遍历所有叶子结点,重复上述步骤直到遍历完整棵树

2.3代码截图

技术分享图片
技术分享图片
技术分享图片
技术分享图片

2.4PTA提交列表截图

技术分享图片
五分的原因:建树构建右子树时函数没写完整
技术分享图片
技术分享图片

十五分的原因:计算wpl时,非叶子结点的条件写成了if(BT->left!=NULL||BT->right!=NULL),逻辑关系就混乱了,不知道是只有左子树为空还是右子树为空亦或是两者皆为空,导致sample 1过了,sample2没过
技术分享图片
技术分享图片

3.截图本周PTA题目集的最终排名

3.1PTA排名

技术分享图片

3.2最终得分

230

4.阅读代码

5.代码Git提交记录截图

技术分享图片

博客作业04--树

标签:遍历   节点   tree   所有结点   inf   输出   类型   info   运算   

原文地址:https://www.cnblogs.com/ljy1999/p/8995052.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!