第04次作业-树

一.学习总结

1.1树结构思维导图

1.2树结构学习体会

  我对树的认识:与前面几章的线性表不同,树是一种非线性结构。

  困难:主要在于不懂如何将自己的思路写成代码,道理感觉都懂,但还是不会打代码.....

  树结构可以解决的问题:表达式求解、解决亲戚关系问题等等

二.PTA实验作业

 题目一:6-1 jmu-ds-二叉树操作集

1.题目要求

2.设计思路

void CreateBTree(BTree &BT,string str){
    初始化一个队列 Q;      //用于存放已建立左或右子树关系的节点
    定义i;               //控制字符数组
    定义BTree类型的T;
    读入str[0];
    if(str[0] is not '\0')
        给BT分配存储空间并将str[0]赋给T->data,且置空其左右孩子;
        将节点T进队;
    else
        BT=NULL;
    while(Q is not empty){
        访问队首将其赋给T并出队;
      i++;
      if(str[i] is '#') 
          T->lchild=NULL;
      else{
          给T分配存储空间并将str[i]赋给T->data,且置空其左右孩子;
          将节点T的左孩子进队;
      }    
      i++;
      T的右孩子同左孩子;
    }
}

3.代码截图

 

4.PTA提交列表

题目二:6-4 jmu-ds-表达式树

 1.题目要求

2.设计思路

创建二叉表达式树
定义树栈 s1; //用于存储运算数
定义字符型栈 s2;//用于存储运算符
定义整型变量i;//控制字符数组
将‘#’入栈s2;
while 字符串不空
    if str[i] 为数字
      then 创建新节点T,将str[i]的值赋给T->data,并置空其左右孩子
    将节点T再次入栈s1;
else 调用Precede函数比较栈顶运算符和当前运算符的优先级 if ‘<’ then 运算符入栈s2; if'=' then s2栈顶元素出栈 if'>' then 创建新节点T并将s2栈顶元素值赋给T->data,右左孩子分别取s1栈顶元素后再次入栈s1; end while 栈s2不空 创建新节点T并赋予其s2栈顶元素值,右左孩子分别取s1栈顶元素后再次入s1栈; end

 

3.代码截图

 

4.PTA提交记录说明

 

粘贴的时候不小心贴了全部代码...

题目三:7-8 jmu-ds-二叉树叶子结点带权路径长度和

1.题目要求

2.设计思路

trans函数将顺序存储转为链式存储
int displeaf(btree bt,int h){
    定义静态局部变量s保存带权路径的长度
    if(bt!=NULL){
      if(bt->lchild!=NULL){
          displeaf(bt->lchild,h+1);    
      }
      if(bt->rchild!=NULL){
          displeaf(bt->rchild,h+1);    
      }
      if(叶子节点){
          s+=权值乘高度(高度由递归次数决定)
      }
}        

 

3.代码截图

 

4.PTA提交记录说明

 一开始我将节点的数据元素定义为整型,忽略了“#”,导致答案错误,后来改为char,在计算s时用减去‘0’来将数字字符转为数字就对了。

三.PTA排名

1.PTA排名截图:

2.我的总分:2分

四.阅读代码

代码功能:求二叉树宽度

代码优点:思路清晰明了且算法简单

代码截图:

代码地址:https://blog.csdn.net/K346K346/article/details/51076268

五.GIT提交记录

 

 

posted @ 2018-05-05 19:38  陈玉婷  阅读(199)  评论(0编辑  收藏  举报