zoukankan      html  css  js  c++  java
  • 博客作业04--树

    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来判断是否为空结点,相比之下,他的方法更简洁。

    5. 代码Git提交记录截图

  • 相关阅读:
    js代码的执行顺序及运算
    javascript讲解
    浏览器的差距
    标准流
    下拉列表
    单位
    滚动标签
    接着说一些有关排版的一些东西
    关于处理浏览器的兼容问题
    关于排版的技巧
  • 原文地址:https://www.cnblogs.com/chenwenjie/p/8995393.html
Copyright © 2011-2022 走看看