第04次作业-树
一.学习总结
1.1树结构思维导图
使用思维导图将树结构的知识点串在一起。树中的每个知识点需细化到每个操作如何实现。
.2 树结构学习体会
认识:是一种数据结构,可以用来表示层次关系,因表示的样子很像一颗倒立的树而得名。树和真正的树有许多相似的地方,也包括根、树枝和叶子,它们的不同在于计算机中的树的根在顶层而它的叶子在底部。在数据结构中的特点,是一对多。
困难:难以将已经理解的内容用代码打出来。
树结构可以解决的问题:树的前,中,后序遍历、哈夫曼编码、并查集问题。
二.PTA实验作业
1. 6-1 jmu-ds-二叉树操作集
(1)题目
(2)设计思路(伪代码或流程图)
1 void CreateBTree(BTree &BT,string str) 2 { 3 创建一个树T 4 定义一个i来计数 5 创建一个队列Q 6 if str[i]!='\0' 7 { 8 BT申请空间 9 BT->data = str[i] 10 初始化BT的左右孩子 11 Q.push(BT) 12 } 13 else BT为空树 14 while 队列不为空 15 { 16 T=Q.front() 17 Q.pop() 18 i++ 19 if str[i]为'#' 20 令T的左孩子为NULL 21 else 22 { 23 T的左孩子申请空间 24 T->lchild->data = str[i] 25 初始化T->lchild的左右孩子 26 push(T->lchild) 27 } 28 i++ 29 if str[i]为'#' 30 令T的右孩子为NULL 31 else 32 { 33 T的右孩子申请空间 34 T->rchild->data = str[i] 35 初始化T->rchild的左右孩子 36 push(T->rchild) 37 } 38 } 39 }
(3)代码截图
(4) PTA提交列表说明
2. 6-4 jmu-ds-表达式树
(1)题目
(2)设计思路(伪代码或流程图)
1 void InitExpTree(BTree &T,string str) 2 { 3 stack<BTree>s; 4 stack<char>op; 5 将#进op栈作为结束的标志 6 while 还有字符 7 { if str 不为运算符 8 将后续的数字存到s栈中 9 else 10 switch(使用Precede函数比较运算符优先级,并且返回<or=or>) 11 { case '<' 栈顶运算符优先级低 12 op.push(str) 13 从str中读取下一个字符 14 break; 15 case '=' 16 两个都为括号 17 从str读取下一个字符 18 break; 19 case '>' 栈s运算符执行 20 建立结点 21 s.push( ); 22 break; 23 } 24 } 25 while op顶不为 '#' 26 从s中取两个结点作为左右孩子结点 27 break; 28 } 29 double EvaluateExTree(BTree T) 30 { 31 double sum=0,a,b; 32 利用ASCII码表将数字字符转化为浮点型 33 并且利用递归把所有字符转换成数字存储到a和b中 34 switch(T->data) 35 case '+' 36 返回 a+b 37 break; 38 case'-' 39 返回 a-b 40 break; 41 case'*' 42 返回a*b 43 break; 44 case '/' 45 if b不为0 46 返回a/b 47 break; 48 else 输出 divide 0 error!并退出程序 49 }
(3)代码截图
(4) PTA提交列表说明
3. 7-2 根据后序和中序遍历输出先序遍历
(1)题目
(2)设计思路(伪代码或流程图)
1 BTnode *CreateBT2(int *post,int *in,int n) 2 { 3 定义树*b; 4 定义整型 *p,r,k; 5 if n<=0 6 return NULL; 7 给r赋值post数组的最后一个元素 8 b=new node; 9 b->data=r; 10 for p=in to in+n-1) 11 if(*p==r)在中序序列中找到根节点所在位置 12 break; 13 两指针相减,得到两指针之间的元素个数,此处即左右子树元素个数 并且赋值给k 14 b->lchild=CreateBT2(post,in,k)递归构造左子树 15 b->rchild=CreateBT2(post+k,p+1,n-k-1)递归构造右子树 16 return b; //返回所构造的二叉链的根节点 17 }
(3)代码截图
(4) PTA提交列表说明
错误:将char型改为int型就对了。
三.截图本周题目集的PTA最后排名
本次题目集总分:285分
必做题共:230分
3.1 PTA排名截图
3.2 我的总分:2分
四. 阅读代码(必做)
代码功能:家谱处理
代码优点:代码较简洁,思路清晰, 无冗杂代码。
代码地址:https://blog.csdn.net/henuni/article/details/73745508
五. 代码Git提交记录截图