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

    1.本周学习总结

    1.思维导图

    2.谈谈你对树结构的认识及学习体会。

    2.PTA实验作业

    这两周学习了树与二叉树,它与前几章学习的内容有很大的不同,前几章学习的线性表,栈与队列等都是线性的存储结构,而这一章学习的“树”是非线性存储结构的。但是,树的存储结构还是可以通过找到元素之间逻辑关系,采用类似线性表的方式,按照结点之间的逻辑关系放到线性存储中。

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

    输入一行中缀表达式,转换一颗二叉表达式树,并求解.
    表达式只包含+,-,*,/,(,)运算符,操作数只有一位,且为整数(有兴趣同学可以考虑负数小数,两位数做法)。按照先括号,再乘除,后加减的规则构造二叉树。
    
    2.1.1设计思路
    void InitExpTree(BTree& T, string str) //建二叉表达式树
    {
    	建立char类型容器
    	建立BTree类型容器
    	建立BTree类型变量t1,t2
    	建立int类型变量i=0
    	while str[i]不为空
    	    if(str[i])为运算符
    		    判断两个运算符的优先关系,分别进行操作
    		else
    		    建立二叉树
    	end while
    	while st不为空
    	   进行操作
    	end while  
    }
    double EvaluateExTree(BTree T)//计算表达式树
    {
    	if T->data不为零
    	   进行相应操作
    	else
    	    return T->data - '0' 
    } 
    
    2.1.2代码截图

    2.1.3本题PTA提交列表说明。

    2.2 题目2: 还原二叉树
    给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
    
    2.2.1设计思路
    建立结构体bt
     bt *findTree(char *a, char *b, int length)
     {
     	if(length==0)
    	 return NULL
    	end if
    	用递归建树
    	 T->lchild = findTree(a, b + 1, i);
         T->rchild = findTree(a + i + 1, b + i + 1, length 
     } 
    int GetHeight(bt *T)
    {
    	if(NULL==0)
    	  return 0
    	end if
    	else
    	  求左孩子与右孩子的高度 
    } 
    
    
    2.2.2代码截图

    2.2.3本题PTA提交列表说明。

    编译错误?
    在对递归的使用不熟,导致频繁出错。
    部分正确?
    对于一些可能的情况没有考虑完全,有些也不知道如何解决。

    2.3 题目3:二叉树叶子结点带权路径长度和
    二叉树叶子结点的带权路径长度指:叶子结点的权重路径长度。本题要求算出二叉树所有叶子结点的带权路径长度和。
    
    2.3.1设计思路
    CreateBT(string str,int i)
        if  下标越界||字符为‘#’||树为空
            return NULL;
        end if
        bt->lchild=递归调用建树函数,下标为2*i;
        bt->rchild=递归调用建树函数,下标为2*i+1;
    }
    void GetWpl(BinTree bt,int h,int &wpl ){   //求长度和 
        if 树为空
            return ;
        end if
        if 该结点是叶子节点 then
            路径长wpl=叶子节点的权重*层数;
        end if
        运用递归 
           查找左孩子的叶子节点,层数+1;
           查找右孩子的叶子节点,层数+1;
    }
    
    2.3.2代码截图


    2.3.3本题PTA提交列表说明。

    在建立求总长度的函数中,最后判断条件应该是左指针和右指针都为空,但我写成左指针或右指针为空,导致部分正确,还有在一个地方判断条件写错,导致出现段错误。

    3.阅读代码

    3.1 题目:扩展二叉树
    由于先序、中序和后序序列中的任一个都不能唯一确定一棵二叉树,所以对二叉树做如下处理,将二叉树的空结点用·补齐,如图所示。我们把这样处理后的二叉树称为原二叉树的扩展二叉树,扩展二叉树的先序和后序序列能唯一确定其二叉树。
    现给出扩展二叉树的先序序列,要求输出其中序和后序序列。
    
    3.2 解题思路
    3.3 代码截图

    3.4 学习体会
  • 相关阅读:
    读书书单
    Kafka学习-Producer和Customer
    Kafka学习-简介
    Maven学习-Profile详解
    Maven学习-项目对象模型
    Maven学习-优化和重构POM
    Maven学习-构建项目
    Maven学习-简介、安装
    连接web端,mysql,返回乱码解决
    android alipay
  • 原文地址:https://www.cnblogs.com/2084624983yue/p/10878509.html
Copyright © 2011-2022 走看看