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 学习体会

posted on 2019-05-16 22:30  风言风语r  阅读(248)  评论(0编辑  收藏  举报

导航