标签:img 整型 作业04 组织 输出 判断 字符 递归 初始化
使用思维导图将树结构的知识点串在一起。树中的每个知识点需细化到每个操作如何实现。
认识:树是非线性的数据结构,每一个节点都只有一个前驱(根节点除外),但是可以有零个或多个后继。这些数据节点按分支关系组织起来,清晰地反映了数据元素之间的层次关系,数据元素之间存在的关系是一对多的关系。
困难:之前都是用非递归的方法创建树,没用过递归的方法创建过树,所以不会用。哈夫曼树该如何用代码实现建立还不是很懂
可以解决的问题:朋友圈、亲戚关系
6-4jmu-ds-表达式树
定义整型变量i=0,flag,字符型变量ch,f
初始化运算符栈st,#为栈底符号
初始化树栈BT
while str[i]
调用函数判断是否是运算符
if 是运算符
ch=栈顶元素
调用函数比较一下优先级
栈顶符号的优先级高,栈顶符号出栈,将它作为一个节点创建树,并从栈BT中依次取出两个作为它的右孩子和左孩子,然后将这个节点放入栈BT
当前符号的优先级高,入栈st
优先级相等,栈顶元素出栈
否则
将它作为一个节点建树,左右子树都为空,然后将它放入栈BT中
end while
while 运算符栈st不为空
ch=栈顶元素
if ch为#,结束循环
否则
将它作为一个节点创建树,并从栈BT中依次取出两个作为它的右孩子和左孩子,然后将这个节点放入栈BT
end while
树建立起来了,但是不知道怎么求值,参考了同学和书上的代码,做出来了。
7-8 jmu-ds-二叉树叶子结点带权路径长度和
定义全局变量wpl=0
if 根节点T为空
return 0
if 根节点的左孩子跟右孩子都为空
wpl=wpl+根节点的值*深度depth
否则
访问左子树
WPL (T->lchild,depth+1)
访问右子树
WPL (T->rchild,depth+1)
建树的方法有点小问题,刚开始不知道,后面用找叶子结点的方法知道了自己建树出了错,改了之后就通过了
7-3 jmu-ds-二叉树层次遍历
定义BTree类型的变量p和队列qu
根节点入队列
while 队列不为空
p=队列里的队头元素
输出这个元素的值
if左孩子存在
左孩子入队列
if右孩子存在
右孩子入队列
end while
建树的时候,采用非递归的方法,少写了一次结束建树的条件:if(str[i]==‘\0‘) break;
本次题目集总分:285分
必做题共:230分
230
BTree CreateBTree(string str,int i)
{
int len;
BTree bt;
bt=new TNode;
len=str.size();
if(i>len-1 || i<=0) return NULL;
if(str[i]==‘#‘) return NULL;
bt->data =str[i];
bt->lchild =CreateBTree(str,2*i);
bt->rchild =CreateBTree(str,2*i+1);
return bt;
}
这是考试时,老师放出来的建立二叉树的代码
该段代码用递归的方式实现了二叉树的建立,短短几行的代码就能实现二叉树的建立,对比之前用非递归的方法,实在是好用太多了,非递归的写了一大串代码。
可惜自己并不会这种方法,也没写过,考试的时候就懵逼了。
标签:img 整型 作业04 组织 输出 判断 字符 递归 初始化
原文地址:https://www.cnblogs.com/a2017/p/8976283.html