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

实验要求:

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

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

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

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


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

【数据结构实验】二叉树的建立以及遍历_第1张图片

举几个例子来说明一下:

【数据结构实验】二叉树的建立以及遍历_第2张图片

答案:DBEAFCG


【数据结构实验】二叉树的建立以及遍历_第3张图片


答案: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;
如果不注意你一开始写肯定会错。而且有的人还改不对。
这篇文章好扯,好垃圾,不想写了。
下载代码
 
  

你可能感兴趣的:(【数据结构实验】二叉树的建立以及遍历)