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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值