树
1.学习总结(2分)
1.1树结构思维导图
1.2 树结构学习体会
-
树结构认识:树是非线性的数据结构,每一个节点都只有一个前驱(根节点除外),但是可以有零个或多个后继。这些数据节点按分支关系组织起来,清晰地反映了数据元素之间的层次关系,数据元素之间存在的关系是一对多的关系。树的遍历有多种,例如先序遍历,中序遍历,后序遍历和层次遍历,每种遍历都可以利用递归这一方法得出来。
-
遇到哪些困难:创建时通过递归完成层次创建二叉树这一项不知道如何实现,之前只通过栈或者队列来完成二叉树的创建,因为递归这一方法虽然代码简单,但是要考虑的东西比较多,而且有时候只是定义了一个量都会对结果造成不小的影响。我以我觉得二叉树的递归创建和应用还是不怎么会灵活运用;
-
树结构可以解决的问题:朋友圈,族谱,实现哈夫曼编码,并查集等
2.PTA实验作业(4分)
题目1:6-2 求二叉树高度
设计思路(伪代码或流程图)
求高度
定义 LD,RD表示左边树和右边树的高度;
if(BT为空树){返回0}
else{
利用递归求出高度
每次递归中比较左右树的高度;
if(左子树高){
LD=LD+1;返回LD;
}
如果右子树高{
RD=RD+1;返回RD;
}
}
}
代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)
PTA提交列表说明。
题目2:6-3 先序输出叶结点
设计思路(伪代码或流程图)
求叶子节点){
if(BT不为空树){
if(一个节点的左右子树均为空){
则输出该节点,此节点即为叶子节点
}
利用递归,分别遍历左右字数,若某一节点的左右子树均为空,则该节点为叶子节点
}
}
代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)
PTA提交列表说明。
题目3:6-4 jmu-ds-表达式树
设计思路(伪代码或流程图)
创建二叉树
定义 i用于数组的遍历;
定义a,r,l表示树的节点;
创建一个用于存放树节点的栈 b;
创建一个用于存放字符的栈c;
c.push('#');
for(i = 0 to str[i]为空){
if (用in函数判断str[i]为数字){
创建一个简单二叉树,
返回的头结点存放于b中
}
else{
while(判断c.top()>str[i]))
{
将b中的两个节点出栈作为str【i】的左右节点
并将返回的头结点存放于b栈中;
c.pop();
}
if (判断c.top()=str[i]))
{
将c中头字符出栈,并进行下一循环
}
将str【i】入栈;
}
}
while(c.top() != '#'){
创建一个简单二叉树,
返回的头结点存放于b中
}
根节点等于最后存放于b的节点;;
}
计算二叉树
{
if(In(T -> data)为字符)
利用递归来实现计算
如果为+,则让左右节点相加;如果为减,则让左右节点相减
如果为*,则让左右节点相乘;如果为除。if(右节点值为0){输出divide 0 error,并退出函数},否则让左右相除
如果判断为数字,
返回 T -> data - '0';
}
代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)
PTA提交列表说明。
树的结构无法完全连接起来导致最后写出的树结构无法通过递归运算,导致递归运算陷入无限死循环导致段错误。将简单的二叉树创建合理的利用起来,发现可以运行正常。
3.截图本周题目集的PTA最后排名(3分)
3.1 PTA排名
3.2 我的得分:
155
4. 阅读代码
-
此代码属于树中的7-1 还原二叉树。该代码的功能是通过先序和中序遍历得出所建立的二叉树。优点是通过递归最大的限度的节省空间,通过移动指向数组位置的数字利用递归来使二叉树正确还原;
-
我是先通过寻找先将树用层次遍历存储在一个数组里再通过递归将其还原出来,他的优势是节省空间,我这个代码不仅计算量大,而且如果层次遍历输出错误就会造成结果错误,不提倡使用;
-
详情请见"杨发热"的PTA;