今天有英语考试,学习编程的时间不多,就仔细看了树的遍历。
如果3节点的树的根为a,右子树为c,左子树为b,则:
先序:a,b,c
中序:b,a,c
后序:b,c,a
我还是太菜,就用最简单的无规律树演示下递归调用的中序吧<(_ _)>
//无规律树
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *L;//左子树
struct node *R;//右子树
}tree;
//1.建树;
tree *kaishi(int data)
{
tree *newnode=(tree*)malloc(sizeof (tree));
newnode->data=data;
newnode->L=NULL;
newnode->R=NULL;
return newnode;
}
//2.连接
void innode(tree *yuannode,tree *l,tree *r)//原节点,插在右子树,插在左子树
{
yuannode->L=l;
yuannode->R=r;
}
//3.中序递归遍历
void mid(tree*p)
{
if(p!=NULL)
{
mid(p->L);
printf("%d ",p->data);
mid(p->R);
}
}
int main()
{
//建节点
tree *a=kaishi(1);
tree *b=kaishi(2);
tree *c=kaishi(3);
tree *d=kaishi(4);
tree *e=kaishi(5);
tree *f=kaishi(6);
tree *g=kaishi(7);
tree *h=kaishi(8);
//连接
innode(a,b,c);//将b,c分别插在a的右,左子树
innode(b,d,e);
innode(c,f,g);
innode(f,NULL,h);
//遍历:从左到右
mid(a);
return 0;
}
输出结果:4 2 5 1 6 8 3 7
构图(有点丑):
明天还有新星杯,我头还晕乎乎的。希望可以有个好成绩吧。
找机会不用递归试着遍历一下树,为什么我的大学生活怎么忙呢,和我想象的不大一样啊。
(;´д`)ゞ