第04次作业-树
Posted 陈玉婷
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第04次作业-树相关的知识,希望对你有一定的参考价值。
一.学习总结
1.1树结构思维导图
1.2树结构学习体会
我对树的认识:与前面几章的线性表不同,树是一种非线性结构。
困难:主要在于不懂如何将自己的思路写成代码,道理感觉都懂,但还是不会打代码.....
树结构可以解决的问题:表达式求解、解决亲戚关系问题等等
二.PTA实验作业
题目一:6-1 jmu-ds-二叉树操作集
1.题目要求
2.设计思路
void CreateBTree(BTree &BT,string str){ 初始化一个队列 Q; //用于存放已建立左或右子树关系的节点 定义i; //控制字符数组 定义BTree类型的T; 读入str[0]; if(str[0] is not \'\\0\') 给BT分配存储空间并将str[0]赋给T->data,且置空其左右孩子; 将节点T进队; else BT=NULL; while(Q is not empty){ 访问队首将其赋给T并出队; i++; if(str[i] is \'#\') T->lchild=NULL; else{ 给T分配存储空间并将str[i]赋给T->data,且置空其左右孩子; 将节点T的左孩子进队; } i++; T的右孩子同左孩子; } }
3.代码截图
4.PTA提交列表
题目二:6-4 jmu-ds-表达式树
1.题目要求
2.设计思路
创建二叉表达式树 定义树栈 s1; //用于存储运算数 定义字符型栈 s2;//用于存储运算符 定义整型变量i;//控制字符数组 将‘#’入栈s2; while 字符串不空 if str[i] 为数字 then 创建新节点T,将str[i]的值赋给T->data,并置空其左右孩子
将节点T再次入栈s1; else 调用Precede函数比较栈顶运算符和当前运算符的优先级 if ‘<’ then 运算符入栈s2; if\'=\' then s2栈顶元素出栈 if\'>\' then 创建新节点T并将s2栈顶元素值赋给T->data,右左孩子分别取s1栈顶元素后再次入栈s1; end while 栈s2不空 创建新节点T并赋予其s2栈顶元素值,右左孩子分别取s1栈顶元素后再次入s1栈; end
3.代码截图
4.PTA提交记录说明
粘贴的时候不小心贴了全部代码...
题目三:7-8 jmu-ds-二叉树叶子结点带权路径长度和
1.题目要求
2.设计思路
trans函数将顺序存储转为链式存储 int displeaf(btree bt,int h){ 定义静态局部变量s保存带权路径的长度 if(bt!=NULL){ if(bt->lchild!=NULL){ displeaf(bt->lchild,h+1); } if(bt->rchild!=NULL){ displeaf(bt->rchild,h+1); } if(叶子节点){ s+=权值乘高度(高度由递归次数决定) } }
3.代码截图
4.PTA提交记录说明
一开始我将节点的数据元素定义为整型,忽略了“#”,导致答案错误,后来改为char,在计算s时用减去‘0’来将数字字符转为数字就对了。
三.PTA排名
1.PTA排名截图:
2.我的总分:2分
四.阅读代码
代码功能:求二叉树宽度
代码优点:思路清晰明了且算法简单
代码截图:
代码地址:https://blog.csdn.net/K346K346/article/details/51076268
五.GIT提交记录
以上是关于第04次作业-树的主要内容,如果未能解决你的问题,请参考以下文章