创建二叉树并遍历二叉树

来源:互联网 发布:相片排版软件 编辑:程序博客网 时间:2024/04/30 06:32

刚刚接触二叉树的同学一很想学习如何构建一颗简单的二叉树,下面我用C语言来实现一个简单的二叉树,并且用先序、中序和后序的方法来遍历它。


#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <string.h>typedef struct node//定义二叉树的节点 /*可能有人不知道typedef是干什么用的写了typedef后在定义结构体时就不用写struct node a;直接写node a;就行了,比较方便*/{    int data;    struct node *ltree,*rtree;}node;node *cNode(int n){    node *p;    p=(node*)malloc(sizeof(node));//申请内存空间     p->data=n;     p->ltree=p->rtree=0;//左孩子与右孩子都为空    return p;// 返回所创建节点(结构体)的指针}void mtree(node *par,node *lc,node *rc)//par父节点,lc左孩子,rc右孩子{    par->ltree=lc;    par->rtree=rc;}void ztr(node *t)//中序遍历 {/*因为遍历左子树的方式与遍历左子树的左子树方式类似,所以可以用递归很方便的写出来代码很少,想着也简单,但计算机执行的过程是很复杂的*/    if (t!=0)    {        ztr(t->ltree);//遍历左子树         printf("%d",t->data);//输出根节点         ztr(t->rtree);//遍历右子树     }}void xtr(node *t)//先序遍历 {    if (t!=0)    {        printf("%d",t->data); //输出根节点        xtr(t->ltree);//遍历左子树         xtr(t->rtree);//遍历右子树             }}void htr(node *t)//后序遍历{    if (t!=0)    {        htr(t->ltree);//遍历左子树         htr(t->rtree);//遍历右子树        printf("%d",t->data);//输出根节点    }} int main(){    int i,j,n;    node *a,*b,*c,*d,*e,*f,*g;    a=cNode(1);//创建一个节点,值为1;     b=cNode(2);    c=cNode(3);    d=cNode(4);    e=cNode(5);    f=cNode(6);    g=cNode(7);    mtree(e,0,g); //e的做孩子为空,右孩子为g mtree(d,e,f);//将e和f分别作为d的左右孩子 mtree(b,c,d);mtree(a,b,0);/*二叉树的样子应该是下面的样子(不知道能不能正常显示):               a=1              /              b=2              / \           c=3 d=4              / \             e=5 f=6              \               g=7*/printf("中序遍历:");ztr(a);puts("");//中序遍历,再输出一个回车 ,puts("");是换行//////////////////////////////////////////printf("先序遍历:");xtr(a);puts("");//////////////////////////////////////////printf("后序遍历:");htr(a);puts("");    system("pause");    return 0;}


0 0
原创粉丝点击