1.学习总结

1.1树结构思维导图

1.2 树结构学习体会
- 1.树与之前的线性表、栈、队列有很大差别,逻辑结构有所不同、同时需要大量使用递归算法
- 2.对于递归算法不熟悉,所以对于树的一些算法不熟悉
- 3.树、二叉树的性质计算有些不熟,计算的时候经常出错,是对二叉树的结构不熟悉,尤其是完全二叉树

2.PTA实验作业

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

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

2.1 题目1:6-1. jmu-ds-二叉树操作集
2.2 设计思路

  void InitExpTree(BTree &T,string str) 
{
建运算符op1栈op.Push(‘#’);
建操作符op2 栈ch.Push(‘#’);
初始化根节点;
While(表达式不为空)
{
If(ch==运算符)
{
与op2栈栈顶比较优先级 
If(栈顶大于或等于ch)
    {
    初始化一个根节点,如果 pop(op1)不为‘#’,把ch作为根节点,左右子树,之后111push(op1);
    若第二次pop(op1)为‘#’不出栈,并将表达式往下移;
}
Else
进入op2栈;
}
If(中缀表达式ch==操作符)
{
Push(op2);
}
表达式向下移一位;
}

double EvaluateExTree(BTree T)  
{
 Op=根;
 定义a=根的左子树;
 定义b=根的右子树;
 If(a,b都为操作符)
 则计算c=a op b的值;
 返回值c;
}


2.1 题目1:6-4 jmu-ds-表达式树
2.2 设计思路

函数:建表达式的二叉树
定义栈s BTree
栈 char op
# 入栈op
定义i=0
while(str[i]不为‘/0’){
    当str[i]不是运算符{
        给树的节点T申请空间
     值为str[i++]
     令T的左右子树为空
     T入栈S
     }
    否则{
        switch(比较op.top(),str[i]的优先级){
       当返回 '<':
             入栈(str[i])->op;
             i++;
             break;
       当返回 '=':
             取栈顶
             i++;
             break;
       当返回 '>':
             T=new BTNode;
             T->data=op栈顶元素
             T->rchild=s栈顶元素
             s出栈
             T->lchild=s栈顶元素
             s出栈
             T入栈S
             op出栈
             break;
     }
    }
}
while(op栈顶元素不为#)
    {
        T=new BTNode;
        T->data=op栈顶元素
        T->rchild=S栈顶元素
        S出栈
        if(S不为空)
        {
            T左孩子等于s栈顶元素
            s出栈
        }
        T入栈S
        op出栈
    }
    T为s栈顶元素
函数:计算表达式树
定义 sum=0,a,b
当T的左右子树都不为空时{
返回 T->data-'0'
}
a=递归计算左子树
b=递归计算右子树
switch(T->data)
{
   + return a+b break
   - return a-b break
   * return a*b break
   / 
   当b<1且b-1不为0{
      输出  "divide 0 error!"
   }
      return a/b
      break
}

2.3 代码截图

2.4 PTA提交列表说明。

2.1 题目1:6-2 求二叉树高度
2.2 设计思路

函数 GetHeight()
定义变量LD表示左子树、LB表示右子树
if(树BT为空)
返回树高为0;
eles
递归左子树,右子树,直到左右子树为空
LD表述左子树高度,LB表示右子树高度
比较 返回(LD或LB +1);

2.3 代码截图

2.4 PTA提交列表说明。

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

- 本次题目集总分:285分
   必做题共:230分

3.1 PTA排名截图

3.2 我的总分:
- 本题评分规则:

(1)2个题目集PTA总分285分:3分(全部题目都做)
 (2)PTA总分在230分--340分:2.5分(必做题全部做完,选做题做部分)
 (3)PTA总分在180--230分:2分(必做题大部分做完)
 (4)PTA总分在130--180分:1.5分
 (5)PTA总分在105分-130分:1分  
 (6)PTA总分在105分以下:0分     

- 我的总分:2.5分

4. 阅读代码(必做)

- 代码地址:https://gitee.com/specialsoldier/codes/l05jietvp9zuq1mfars4360
- 代码说明:判断一个树是否为另外一个树的子树。

5. 代码Git提交记录截图