博客作业04--树

1.学习总结

1.1树结构思维导图

使用思维导图将树结构的知识点串在一起。树中的每个知识点需细化到每个操作如何实现。
博客作业04--树_第1张图片

1.2 树结构学习体会

相较于之前的学习内容更困难些,光是创建遍历就有多种方法,树图看着不难实际操作却不简单,相应的树的应用也很广泛

2.PTA实验作业

2.1 题目1:求二叉树高度

2.2 设计思路

···
定义变量HL表示左子树高度,HR表示右子树高度,MaxH表示左子树高度和右子树高度中最大值
设置递归出口 树空 return 0;
IF树不空
递归BT->Left求左子树高度HL值
递归BT->Right求右子树高度HR值
取左右子树最大值MaxH
返回 MaxH+1

##2.3 代码截图
![](https://images2018.cnblogs.com/blog/1232103/201805/1232103-20180505204855000-329488330.png)

##2.4 PTA提交列表说明
##返回值MaxH未加根节点1,导致高度小一

##2.1 题目2:表达式树

##2.2 设计思路
···
void InitExpTree(BTree &T,string str)函数
定义树型栈stacktree,定义字符栈op,字符'#'入栈op,设置树节点Tr,Tl存放左孩子和右孩子
while表达式str未结束
if 字符str 为操作数
生成一个只有根节点的子树T
if 字符str 为运算符
{
while 字符str优先级lchild=Tl,T->rchild=Tr
         T入栈stacktree  } 
if 字符str优先级>op栈顶运算符
字符str入栈op
if 字符str优先级=op栈顶运算符
op栈退栈一个元素
}
double EvaluateExTree(BTree T)函数
若节点T为叶子节点则return T域值字符所对应的数字
判断T域值为运算符
return 递归的左孩子节点+递归的右孩子节点EvaluateExTree(T->lchild),EvaluateExTree(T->rchild)之间以相应运算符运算的结果
若做除法分母为0输出divide 0 error!并结束程序
···

2.3 代码截图

博客作业04--树_第2张图片

2.4 PTA提交列表说明。

博客作业04--树_第3张图片

char Precede(char t1,char t2) 函数没有判断t1,t2对应的是op栈顶符号还是str字符导致调用函数后使得堆栈溢出。判断op栈顶运算符优先级大于str字符优先级时没有while循环使得op运算符栈只出栈一次,答案错误。

2.1 题目3:7-2 根据后序和中序遍历输出先序遍历

2.2 设计思路

```
设置树型指针b,字符变量r,字符指针p,整型变量k,post存放后序序列,in存放中序序列
if 二叉树结点<=0 返回NULL
找到后序序列pre中的根节点值赋给r
创建二叉树节点b,b->data=r
for p=in to *p=r
在in中查找根节点
得到根节点在中序序列in下标k
递归构造左右子树
b->lchild=CreateBT2(post,in,k)
b->rchild=CreateBT2(post+k,p+1,n-k+1)
···

2.3 代码截图

博客作业04--树_第4张图片

2.4 PTA提交列表说明。

忽略了下标和实际位置的关系导致根节点查找出现错误。

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

3.1 PTA排名


3.2 我的得分:1.5

4. 阅读代码

博客作业04--树_第5张图片

功能:复制一颗树,优点是利用递归函数,代码简洁。

地址:https://blog.csdn.net/qq78442761/article/details/78823911

5. 代码Git提交记录截图

博客作业04--树_第6张图片

你可能感兴趣的:(博客作业04--树)