博客作业04--树
1.学习总结(2分)
1.1树结构思维导图
1.2 树结构学习体会
树结构大体分为,顺序和链式存储结构,我主要掌握了:
(1)二叉树的创建 ,包括层次建树,和递归建树。
(2)二叉树的遍历,其中包括先序,后续,中序还有层次遍历
(3)二叉树的线索化,有先序,后序,中序线索化,但是都没掌握,代码不懂怎么写。
(4)然后就是哈夫曼树计算wpl
体会:树很难,感觉比之前学的都难,很多东西都没有掌握,其中感觉,线索化树,和哈夫曼树的建立很难,
还有并差集算法的实现也是不理解。
2.PTA实验作业(4分)
2.1 题目1:7-1 还原二叉树(25 分)
2.2 设计思路(伪代码或流程图)
已知先序为遍历为根左右,中序为左根右。
定义一个数 T,指针*pre指向先序序列,*in 指向中序遍历。*p用于遍历操作。
先序的第一个*pre 为根,在中序数列中找到与*pre 相同的字母,
在此指针的左边是以该指针为根节点的左子数,其右边就为右子数。
T->data=*pre
p=in;
for(p=in to p=in+n)){
if(*p==*pre ) 退出
}
k=p-in//计算左子数的长度。
T->lchild=Creat(pre+1,in,k);
T->rchild=Creat(pre+k+1,p+1,n-k-1);
利用递归得出树
2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)
2.4 PTA提交列表说明。
2.1 题目2:7-3 jmu-ds-二叉树层次遍历(25 分)
2.2 设计思路(伪代码或流程图)
建立二叉树、
if(ch=='#') T=NULL
否则{
T->data=L[i];
T->lchild=T->rchild=NULL;
Creat (T->lchild,L,2*i);//递归左孩子
Creat (T->rchild,L,2*i+1);//递归有孩子
}
层次遍历
if(T不为NULL的请况下){
进队T
while(队不空的情况下){
BT=队头元素,
输出BT
出队
}
if(BT的左子树不为NULL)让其左子树进队
if(BT的右子树不为NULL)让其右子树进队
2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染
2.4 PTA提交列表说明。
2.1 题目2 6-4 jmu-ds-表达式树(25 分)
2.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 }