第04次作业-树

1.学习总结

1.1树结构思维导图

 

1.2 树结构学习体会

谈谈你对树结构认识,学习这个结构是否遇到哪些困难,树结构可以解决的问题。

树是一种十分重要的非线性数据结构,有一对多的结构特点。

困难 树结构在编程中较抽象,出现过一些理解的困难。对数结构的应用较生涩。

可以解决的问题:堆及其应用,哈夫曼树,集合及其运算。

2.PTA实验作业

本周要求挑选出3道题目书写设计思路、调试过程。设计思路使用伪代码描述。题目选做要求:

  • 如果选6-1,只需要描述建树的伪代码。
  • 6-4必选

具体书写内容及格式如下:


2.1 题目1:

6-2 求二叉树高度

2.2 设计思路(伪代码或流程图)

int GetHeight( BinTree BT )

定义left左子树高度,定义right右子树高度

left=right=0;

if(空树) return 0;

left= GetHight(左子树);

right=Getheight(右子树);

if(左子树比右子树高) return left+1;

否则 return right+1;

 

2.3 代码截图

 

2.4 PTA提交列表说明。

 


 编译错误因为Bintree定义Left,Right首字母大写,提交的时候没有大写。

题目2:

6-4 jmu-ds-表达式树

2.2 设计思路

void InitExpTree(BTree &T,string str)

{

stack a 存放数字,x 存放运算符;

while(str还有元素)

if(str【i】不是运算符) 新建树类型节点将该元素存入栈a;

else {

switch(比较x.top和str[i])

{

case‘小于’ :x.push(str【i】)

case‘等于’:x出栈

case‘大于’:新建T节点,T.data为x栈顶,T右孩子为a栈顶,a出栈将T压入栈,x出栈,T左孩子为a栈顶,a出栈后压入T,x出栈

}

}

while(x栈顶不为‘#’){

新建T节点,T.data为x栈顶,T右孩子为a栈顶,a出栈

if(a不为空)T左孩子为a栈顶,a出栈

将T压入a,x出栈

}

T为a栈顶。

}

 double EvaluateExTree(BTree T)

{

定义a,b分别代表左右子树的值

if(T为根节点)return T.data;

递归算法a=EvaluateExTree(T左子树) b=EvaluateExTree(T右子树)

switch(T。data){

case‘+ - *’ return a + - *b;

case‘/’ if(b为0)输入提示 程序非正常终止

else return a/b;

}

}

2.3 代码截图

 

2.4 PTA提交列表说明。

 

建树的时候对左孩子赋值没有处理好

 

题目3:

7-2 根据后序和中序遍历输出先序遍历

2.2 设计思路

Tree *RestoreTree(int h1,int h2,int z1,int z2)    h为后序序列,z为中序序列,h1h2z1z1分别代表两序列的首末下标

{

新建head节点;

head.data=后序序列末元素h【h2】;

for(int i from 首下标 to 末下标)

{

if(z【i】等于根){递归RestoreTree建立左右子树}

}

}

先序遍历head展示结果 void PreOrder(Tree *tree)

2.3 代码截图

2.4 PTA提交列表说明。

输出格式空格间距问题

3.截图本周题目集的PTA最后排名

总分:1分

4. 阅读代码(必做)

 

 代码功能为计算叶子节点带全路径。优点利用字符串层次遍历的特点理清了元素i和左孩子2i右孩子2i+1的关系,方便了树的构造和带权路径长度计算。

地址:http://www.cnblogs.com/lanxiang/p/8995779.html

5. 代码Git提交记录截图

posted on 2018-05-05 20:57  黄斗浩  阅读(395)  评论(0编辑  收藏  举报

导航