第04次作业-树

1.学习总结
1.1树结构思维导图

1.2 树结构学习体会

2.PTA实验作业
本周要求挑选出3道题目书写设计思路、调试过程。设计思路使用伪代码描述。题目选做要求:
如果选6-1,只需要描述建树的伪代码。
6-4必选

2.1 题目1:6-1
2.2 设计思路(伪代码或流程图)

void CreateBTree(BTree &BT,string str)//根据层次字符序列创建二叉树
 {
    If(str不为空)
    {
      Str【i】 为根;
      CreateBTree(BT, str【2i+1】);
      CreateBTree(BT, str【2i+2】);
     }
}

void PreOrder( BTree BT );//先序遍历二叉树
{
  If(BT不为空)
  {
    If(BT不是‘#’)
    输出根;
    PreOrder(根的左孩子);
     PreOrder(根的右孩子);
   }
}

void InOrder( BTree BT );//中序遍历二叉树
{
   If(BT不为空)
  {
     InOrder(根的左孩子);
     If(BT不是‘#’)
          输出根;
     InOrder(根的右孩子);
  }
}

void PostOrder(BTree BT);//后序遍历二叉树
{
    If(BT不为空)
    {
       PostOrder(根的左孩子);
       PostOrder(根的右孩子);
    }
}

2.1 题目2:6-4
2.2 设计思路(伪代码或流程图)

    void InitExpTree(BTree &T,string str) //建表达式的二叉树
{
建 运算符op1栈op.Push(‘#’);
建 操作符op2 栈ch.Push(‘#’);
初始化二叉树根节点;
While(表达式未结束)
{
If(中缀表达式ch==运算符)
{
与op2栈栈顶比较优先级
If(栈顶>=ch)
    {
    初始化一个根节点, pop(op1),pop(op1)不为‘#’,将ch作为根节点,两个数为为左右子树,再push(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.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)



2.4 PTA提交列表说明。

不会改。
2.1 题目3:7-2
2.2 设计思路(伪代码或流程图)

设计一个建造二叉树的函数和一个先序遍历函数
BTNode CreateBT2(int post,int in ,int n)//构造二叉树
{
//post存放后序序列,in存放中序序列
If(n<=0)
Return 0;
Else
{
定义r=根;
找到中序序列中根所在下标为k;
根的左孩子=CreateBT2(post, in , k);
根的右孩子=CreateBT2(post+k, p+1 , n-k-1)
}
}
void PreOrder(BTNode b)//先序遍历二叉树
{
If(树不为空)
{
输出根;
先序遍历根的左孩子,先序遍历右孩子;
}
}

2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)

2.4 PTA提交列表说明。

代码运行时只可以打出n和第一串数字;
原因是在源代码中将数字串全都定义成字符型,后来将其改为整型数值;
且原代码中main中输入时忘记输入整数n;
3.截图本周题目集的PTA最后排名

本次题目集总分:285分
必做题共:230分
总分=155
3.1 PTA排名截图

3.2 我的总分:155
4. 阅读代码(必做)
本次为必做
找1篇和树结构有关的代码,说明该代码功能是什么,优点是什么?
给出代码相关地址。
5.代码Git提交记录截图