您的位置:首页 > 理论基础 > 数据结构算法

【数据结构实验】二叉树的建立以及遍历

2014-11-01 23:02 453 查看
<span style="font-family: Arial, Helvetica, sans-serif;">实验要求:</span>


a. 用先序递归遍历法建立二叉树;

b. 输出三序递归遍历及层次遍历节点访问次序;

c. 用先序,中序遍历序列建二叉树,输出后序递归遍历及层次遍历节点访问次序。

二叉树有诸多遍历方式维基百科:(前中后)三序遍历以及层序遍历。 我觉得最难的遍历是中序遍历。

中序遍历递归定义如下:先访问左子树,再访问根节点,最后访问右子树。



举几个例子来说明一下:



答案:DBEAFCG



答案:GDHBEAKCIJF

看了上面的例子你会了吗。还不会就私信@何欢乙,继续聊。

当我们把以上的问题解决了之后就要做实验了呗(其实哪里有问题哦…)递归在这时真的很好用,而且用二叉链表甚至三叉链表来保存二叉树真的很巧妙。

我先讲讲自己在写代码的时候的感受,一,老师给了大部分的算法,虽然敲代码事小,理解其中的思想是很重要的。二,一定要自己思索,过程真的很重要,假如没有思考这个过程,结果对了收获也会很小。三,算法是程序的灵魂,我们写代码,算法很重要,要花时间去琢磨琢磨消化消化。

虽然老师给了算法(基本就是代码),在写层次遍历的时候还是有点卡。卡就卡在坑爹的ElemType上,学数据结构的人都知道这是啥,这就是那个传说中的数据类型(可以改成任何类型,int,char,struct…)

如下:

typedef struct node
{
char data;
struct node *lchild,*rchild;
}*BiT,BiTnode;
typedef struct QNode{
BiT data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
QueuePtr front;
QueuePtr rear;
}LinkQueue;

void layertrave(BiT bt)
{   LinkQueue Q;
if(bt == NULL) return;
InitQueue(Q);    Enqueue(Q,bt);
while(!emptyq(Q))
{
bt = Dequeue(Q);
printf("%c",bt->data);
if(bt->lchild) Enqueue(Q,bt->lchild);
if(bt->rchild) Enqueue(Q,bt->rchild);
}
}

看了上面就知道有个地方比较不常见。就是QNode结构体当中的BiT data;[/code]
如果不注意你一开始写肯定会错。而且有的人还改不对。

这篇文章好扯,好垃圾,不想写了。

下载代码


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: