第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提交记录截图

 

posted @ 2018-05-05 17:05  木桐  阅读(395)  评论(0编辑  收藏  举报