码迷,mamicode.com
首页 > 其他好文 > 详细

博客作业04--树

时间:2018-05-05 20:40:07      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:树结构   AC   第一个字符   伪代码   优先   排名   编译错误   alt   运算   

1.学习总结(2分)

1.1树结构思维导图

1.2 树结构学习体会

建树可以用递归或者利用队列,其中我认为较难的是递归,容易让我的思路混淆,还需多加练习。

2.PTA实验作业(4分)

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

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

(计算表达式树) 
建立存储树的栈 b
存储字符的栈 c
若输入的字符为数字,则建立存储该数字的树且存入栈b 
若输入的字符为运算符
    若输入的字符优先级小于等于栈c的字符
        则取出栈b中的两个树 
        以及栈c中的字符,构造以栈c字符为父节点,栈b树为左右节点的树,并将该数存入栈b
    若优先级相等
        则表示右括号遇到左括号,将左括号取出,continue 
    存入该运算符   
while (!c.empty)
     则取出栈b中的两个树 
    以及栈c中的字符,构造以栈c字符为父节点,栈b树为左右节点的树,并将该数存入栈b
(建表达式的二叉树) 
若该节点为运算符
    return 左孩子与右孩子与该运算符对应的运算 
    若该运算符为 ‘/’,则判断右结点是否为0
若该节点不为运算符
    return  T -> data - ‘0‘ 

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

技术分享图片

技术分享图片

2.4 PTA提交列表说明。

技术分享图片

多种错误是因为遇到括号时取出了2次符号,而我已经用了continue跳过右括号入栈的步骤,因此只需去出一次括号,如下图
技术分享图片

2.5 题目1:7-1 还原二叉树

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

(还原二叉树函数)
btree rebuild(char f[],char m[],int min,int max),f为先序,m为中序,min和max为左右边界 
起初max为结点数减一,min为0,全局变量fi = 0代表字符串f[fi](前序字符串)第一个字符 
构建树结点 t
若min > max
    表示该节点为空,返回NULL
for i=min to max
    查找中序字符串中与先序字符串f[fi]相等的字符
    并且fi ++,用于下一次查找
令该结点 t -> data = m[i]
         t -> lchild = rebuild(f,m,min,i-1); 
         t -> rchild = rebuild(f,m,i+1,max); 
返回t 
(判断树的高度函数)
若b为空
    返回 0
否则
    令   a = GetHeight( BT -> lchild);
        b = GetHeight( BT -> rchild);
    返回 a +1 与 b + 1 中大的值 

2.7 代码截图

技术分享图片

技术分享图片

2.8 PTA提交列表说明。

技术分享图片
无明显错误(编译错误是因为用错了编译器)

2.9 题目1:7-3 jmu-ds-二叉树层次遍历

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

构建树结点 b
建立用于存储树的队列 q 
    输出第一个结点并将该节点存入队列q中
while(队列不为空时)
    取出队列中的树 
    若左节点不为空 
    输出左节点并且将该节点存入队列q 
    若右节点不为空 
    输出右节点并且将该节点存入队列q 

2.11 代码截图

技术分享图片

2.12 PTA提交列表说明。

技术分享图片
建树时判断空结点的条件错误,缺少了 i <= len的条件导致部分错误

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

3.1 PTA排名

技术分享图片

3.2 我的得分:

180

4. 阅读代码(必做,1分)

#include<bits/stdc++.h>
using namespace std;
typedef struct BinTree Node;
typedef Node* BTree;
struct BinTree{
    BTree left;  
    BTree right;  
    char data;  
};  
BTree findTree( char*in , char*pre , int n )  
{  
    if( n<=0 )  
        return NULL;
    BTree t = new Node;  
    t->data = *pre;  
    int i;  
    for( i=0 ; i<n ; i++ )  
        if( in[i] == *pre ) 
            break;  
    t->left  = findTree( in , pre+1 , i);  
    t->right = findTree( in+i+1 , pre+i+1 , n-i-1 );
    return t;  
}
int Getlen( BTree t ) {
    if( !t )  
        return 0;  
    return max( Getlen(t->left),Getlen(t->right) ) + 1;
}  
int main()  {  
    char pre[55] , in[55];
    int n;  
    cin >> n;
    cin >> pre;
    cin >> in;
    BTree bt = new Node;
    bt = findTree( in , pre , n );  
    cout << Getlen( bt ) << endl;  
}

吴某的还原二叉树代码,他的还原二叉树函数用了一个变量n,而我用了2个变量 max 和 min来判断是否为空结点,相比之下,他的方法更简洁。

  1. 代码Git提交记录截图
    在码云的项目中,依次选择统计-Commits历史-设置时间段,进行搜索并截图,如下图所示,需要出现学号、项目提交说明。请在码云中将你的昵称改为“学号-姓名”。

博客作业04--树

标签:树结构   AC   第一个字符   伪代码   优先   排名   编译错误   alt   运算   

原文地址:https://www.cnblogs.com/chenwenjie/p/8995393.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!