1.学习总结
1.1树结构思维导图
1.2 树结构学习体会
- 1.树与之前的线性表、栈、队列有很大差别,逻辑结构有所不同、同时需要大量使用递归算法
- 2.对于递归算法不熟悉,所以对于树的一些算法不熟悉
- 3.树、二叉树的性质计算有些不熟,计算的时候经常出错,是对二叉树的结构不熟悉,尤其是完全二叉树
2.PTA实验作业
本周要求挑选出3道题目书写设计思路、调试过程。设计思路使用伪代码描述。题目选做要求:
如果选6-1,只需要描述建树的伪代码。
6-4必选
2.1 题目1:6-1. jmu-ds-二叉树操作集
2.2 设计思路
void InitExpTree(BTree &T,string str)
{
建运算符op1栈op.Push(‘#’);
建操作符op2 栈ch.Push(‘#’);
初始化根节点;
While(表达式不为空)
{
If(ch==运算符)
{
与op2栈栈顶比较优先级
If(栈顶大于或等于ch)
{
初始化一个根节点,如果 pop(op1)不为‘#’,把ch作为根节点,左右子树,之后111push(op1);
若第二次pop(op1)为‘#’不出栈,并将表达式往下移;
}
Else
进入op2栈;
}
If(中缀表达式ch==操作符)
{
Push(op2);
}
表达式向下移一位;
}
double EvaluateExTree(BTree T)
{
Op=根;
定义a=根的左子树;
定义b=根的右子树;
If(a,b都为操作符)
则计算c=a op b的值;
返回值c;
}
2.1 题目1:6-4 jmu-ds-表达式树
2.2 设计思路
函数:建表达式的二叉树
定义栈s BTree
栈 char op
# 入栈op
定义i=0
while(str[i]不为‘/0’){
当str[i]不是运算符{
给树的节点T申请空间
值为str[i++]
令T的左右子树为空
T入栈S
}
否则{
switch(比较op.top(),str[i]的优先级){
当返回 '<':
入栈(str[i])->op;
i++;
break;
当返回 '=':
取栈顶
i++;
break;
当返回 '>':
T=new BTNode;
T->data=op栈顶元素
T->rchild=s栈顶元素
s出栈
T->lchild=s栈顶元素
s出栈
T入栈S
op出栈
break;
}
}
}
while(op栈顶元素不为#)
{
T=new BTNode;
T->data=op栈顶元素
T->rchild=S栈顶元素
S出栈
if(S不为空)
{
T左孩子等于s栈顶元素
s出栈
}
T入栈S
op出栈
}
T为s栈顶元素
函数:计算表达式树
定义 sum=0,a,b
当T的左右子树都不为空时{
返回 T->data-'0'
}
a=递归计算左子树
b=递归计算右子树
switch(T->data)
{
+ return a+b break
- return a-b break
* return a*b break
/
当b<1且b-1不为0{
输出 "divide 0 error!"
}
return a/b
break
}
2.3 代码截图
2.4 PTA提交列表说明。
2.1 题目1:6-2 求二叉树高度
2.2 设计思路
函数 GetHeight()
定义变量LD表示左子树、LB表示右子树
if(树BT为空)
返回树高为0;
eles
递归左子树,右子树,直到左右子树为空
LD表述左子树高度,LB表示右子树高度
比较 返回(LD或LB +1);
2.3 代码截图
2.4 PTA提交列表说明。
3.截图本周题目集的PTA最后排名
- 本次题目集总分:285分
必做题共:230分
3.1 PTA排名截图
3.2 我的总分:
- 本题评分规则:
(1)2个题目集PTA总分285分:3分(全部题目都做)
(2)PTA总分在230分--340分:2.5分(必做题全部做完,选做题做部分)
(3)PTA总分在180--230分:2分(必做题大部分做完)
(4)PTA总分在130--180分:1.5分
(5)PTA总分在105分-130分:1分
(6)PTA总分在105分以下:0分
- 我的总分:2.5分
4. 阅读代码(必做)
- 代码地址:https://gitee.com/specialsoldier/codes/l05jietvp9zuq1mfars4360
- 代码说明:判断一个树是否为另外一个树的子树。