1.本章学习总结
1.1思维导图
1.2.谈谈你对树结构的认识及学习体会:
树就是非线性数据结构,相对于之前所学的所有知识来说,树与二叉树的难度要高于之前所学的知识。孩子树,双亲树,孩子兄弟树,二叉树,这些都是重点。
关于树的学习,树的基本术语,树的性质,这些都是我们需要去记得东西。尤其是学习树,还要懂得如何去画树,画图软件也是我们需要学习的。
2.PTA实验作业
2.1.题目1:题目名称(编程题)
6-4 jmu-ds-表达式树 (25 分)
2.1.1 设计思路
建栈 初始化:stacktree栈
while(表达式未结束)
if(ch==操作数)
生成一个只有根结点的子树T
if(ch==运算符)
while(ch<op栈顶运算符) 栈顶优先级高,则
创建一个树结点T,数据为op.top()
stacktree弹出2个根结点T1,T2
T->lchild=T1,T->rchild=T2
stacktree.push(T)
if(ch>op顶运算符) op.push(ch)
if(ch==op顶运算符) 则op.pop()
if(T不为空)
then
if(左右子树不为空)
then 返回对应数值
递归左右子树得到a,b
switch(结点值)
对应符号计算 返回值
if(除数为0)
then 输出错误
else a/b
2.1.2代码截图
2.2.3本题PTA提交列表说明
Q1:在写因为switch部分忽略了break导致部分正确
2.2.题目1:题目名称
7-4 jmu-ds-二叉树叶子结点带权路径长度和 (25 分)
2.2.1 设计思路
首先定义结构体用于储存二叉树
BinTree CreateBTree(string str, int i, int h);
定义函数 wpl(BinTree T); 求和、
BinTree CreateBTree(string str, int i, int h)
{
if i < 0 且 i >= length do
返回 NULL;
end if
if str[i] == '#'
返回 NULL;
end if
定义结构体变量 t,并赋予空间;
用来储存二叉树
返回 t;
}
int wpl(BinTree T)
{
if BT == NULL
返回 0;
end if
if BT->left == NULL 且 BT->right == NULL
返回 ((BT->data - '0')*BT->high);
end if
返回 (wpl(BT->left) + wpl(BT->right));
}
2.2.2代码截图
2.2.3本题PTA提交列表说明
Q1:在树的建立上出现了错误
2.3.题目1:题目名称
7-1 还原二叉树
2.3.1设计思路(伪代码)
main
定义n ch a[MaxSize],b[MaxSize] ,T
T=ReturnTree(a,b,N);
输出 GetHight(T)
BTree ReturnTree
if(length==0) return NULL
建立T的节点空间
T->data=*b
for(i=0;i!=length;i++)
T->lchild=ReturnTree(a,b+1,i);
T->rchild=ReturnTree(a+i+1,b+i+1,length-i-1);
返回T
int GetHight
定义l, r;
if(BT==NULL)
返回0
l=GetHight(BT->lchild);
r=GetHight(BT->rchild);
返回结果 (l>r?l+1:r+1)
2.3.2代码截图
2.3.3本题PTA提交列表说明
Q1:建树的递归有一些问题,最开始直接运用T->lchild=CreatTree( s, 2 * i)这个,但是建的不对,最后借鉴了一下别人的方法,改正了一下
3.栈和队列上机考试错题及解决办法(-3--3分)
3.1.错题1
树上机考试--网络18 7-2 jmu-ds-输出二叉树每层节点
3.2.错误代码实例:
错误代码
3.3.分析错误原因及体会
二叉树为空的情况漏考虑了,要考虑这个只要在刚开始入队情况下加上判断队列为空的条件即可解决;关于树的学习上,从遍历最基础的开始,树的很多操作都要用到递归,而递归是一件让人很头疼的事,在遇到递归函数时,经常会出现混乱,