1.学习总结
1.1树结构思维导图

1.2 树结构学习体会
树的结构:非线性结构,也是递归型的结构,属于集合之间的关系。
困难:如果对递归的算法不是很领悟的时候,对树的一些操作的问题还是不容易理解。
树结构可以解决的问题:
并查集问题
家谱处理问题
哈夫曼编码的问题
表达式转换的问题
2.PTA实验作业
2.1 题目1

2.2设计思路
void InitExpTree(BTree &T,string str) //建表达式的二叉树
{
stack<BTree>s;
stack<char>op;
将#进op栈
while 表达式未结束
{ if str 不为运算符
将后续的数字存到s栈中
else
switch(Precede(op栈顶运算符,str))
{ case '<' 栈顶运算符优先级低
op.push(str)
从str中读取下一个字符
break;
case '='
只有两个括号满足这个情况
从str读取下一个字符
break;
case '>' 栈s运算符执行
建立结点
s.push( );
break;
}
}
while op顶不为 '#'
从s中取两个结点
s.push( );
break;
}
2.3代码截图


2.4 PTA提交列表说明。

这题在老师没讲之前,我是想利用栈将中缀表达式转换成后缀表达式在建树,但是后面发现这是道函数题,不能再自己写一个函数了
然后在老师的讲解之下发现可以直接利用中缀表达式建树,那所有问题迎刃而解了。只有清楚< = >三种情况下时候的操作建树就没问题了。
2.1 题目2

2.2设计思路
集合大概存储方式:
存储方式就是如此
void match
{
int child,parent;
输入表达关系的一句话
让child为第一个人物的下标
让parent为第二个人物的下标
switch(关系)
{
case parent :判断父母
case child :判断父母反过来
case sibling :判断兄弟
case ancestor :判断祖先
case descendant :判断祖先反过来
}
if 正确 输出true
else false
}
int Trace(int child)
{
// 从该名字往前找到第一个空格比他少的名字就是他的parent;
for i=child-1 to 0
if 空格少 return i;
return -1;
}
bool CheckParent(int child,int parent)
{
if Trace(child)==parent true
else false
}
bool CheckAncestor(int child,int ancetor)
{
while c!=-1
if CheckParent(c,an) true;
else c = Trace(c);
false;
}
bool CheckSibling(int child1,int child2)
{
if Trace(child1)==Trace(child2) true;
else false;
}
2.3代码截图


2.4 PTA提交列表说明。


这题的注意事项:
1.只有同一个parent的才能叫sibling;
2.从该名字往前找到第一个空格比他少的名字就是他的parent;
3.Ancestor必须是parent的parent的……parent,而不仅仅是空格比他少就行。
4.此题输入较多,在输入方面会造成缓存区未清空的现象(空格没被吃掉),导致输入未匹配上,这要注意
2.1 题目3

选择这题的原因:这题是用到了哈夫曼树的思想,但是并没有去建树,而是用到了优先队列,我想粗略了解下优先队列
优先队列:priority_queue
头文件:#include<queue>
定义:priority_queue<类型名>队列名
priority_queue<int> q; //定义元素从大到小的出队的队列q
priority_queue<int,vector<int>, greater<int> > q; //定义元素从小到大的出队的队列q
和普通queue操作不同的是,他没有back和front,反而只有top

欲了解更多优先队列知识可参考
点我获取更多知识
2.2设计思路
priority_queue<int,vector<int>,greater<int> >Q;
初始化小先出队列的优先队列
cin -> n
for i=0 to n-1
cin -> m
Q.push(m)
while (Q is not empty){
Q.pop()->x
if(Q is not empty)
{
Q.pop()->y
sum=sum+x+y
产生新的结点Q.push()->(x+y)
}
}
cout -> sum
2.3代码截图

2.4 PTA提交列表说明。

额。。。注意切换编译器吧。
3.1 PTA排名截图

3.2 我的总分:3分
4. 阅读代码
二叉树及其遍历 树的同构
这道题目的精髓之处在于十分考验对建树,遍历,递归的理解。
建树的时候是用到了顺序存储
在判断是否同构的函数里面,凭借分析各种情况去return,有利于加深新手对树的递归模型的理解。
5. 代码Git提交记录截图

浙公网安备 33010602011771号