创建二叉树并遍历二叉树

简介:

刚刚接触二叉树的同学一很想学习如何构建一颗简单的二叉树,下面我用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;
}


相关文章
排序二叉树的创建及先序、中序、后序输出二叉树
排序二叉树的创建及先序、中序、后序输出二叉树
56 1
|
人工智能 Java 测试技术
二叉树通过前序中序来构建二叉树(炒鸡详细到每一步)
二叉树通过前序中序来构建二叉树(炒鸡详细到每一步)
|
6月前
|
存储
二叉树详解(深度优先遍历、前序,中序,后序、广度优先遍历、二叉树所有节点的个数、叶节点的个数)
二叉树详解(深度优先遍历、前序,中序,后序、广度优先遍历、二叉树所有节点的个数、叶节点的个数)
【霍罗维兹数据结构】二叉树前中后序遍历 | 层序遍历 | 复制二叉树 | 判断两个二叉树全等 | 可满足性问题
【霍罗维兹数据结构】二叉树前中后序遍历 | 层序遍历 | 复制二叉树 | 判断两个二叉树全等 | 可满足性问题
72 0
|
6月前
二叉树基础oj练习(单值二叉树、相同的树、二叉树的前序遍历)
二叉树基础oj练习(单值二叉树、相同的树、二叉树的前序遍历)
35 0
|
6月前
|
算法 编译器 C语言
二叉树的创建、销毁、层序遍历与层序遍历的进阶、利用层序遍历判断二叉树是否是为完全二叉树
二叉树的创建、销毁、层序遍历与层序遍历的进阶、利用层序遍历判断二叉树是否是为完全二叉树
|
6月前
|
算法 Java 程序员
【算法训练-二叉树 一】【遍历二叉树】前序遍历、中序遍历、后续遍历、层序遍历、锯齿形层序遍历、二叉树右视图
【算法训练-二叉树 一】【遍历二叉树】前序遍历、中序遍历、后续遍历、层序遍历、锯齿形层序遍历、二叉树右视图
69 0
二叉树的中后序遍历构建及求叶子
二叉树的中后序遍历构建及求叶子
169 0
|
存储 算法 图形学
LeetCode:二叉树的前、中、后序遍历——如何创建一棵【二叉树】
二叉树是一种树形数据结构,其每个节点最多只有两个子节点。通常将节点分为三种类型:根节点、内部节点和叶子节点。其中,根节点是二叉树的唯一访问起点,内部节点具有一个父节点和两个子节点,而叶子节点没有子节点。二叉树的底层数据结构可以使用链表或数组来实现。
124 0
|
算法 C语言
【递归调用在二叉树中的应用】前序遍历、中序遍历、后序遍历、求二叉树叶子结点及复制二叉树的C语言实现
【递归调用在二叉树中的应用】前序遍历、中序遍历、后序遍历、求二叉树叶子结点及复制二叉树的C语言实现
151 0
【递归调用在二叉树中的应用】前序遍历、中序遍历、后序遍历、求二叉树叶子结点及复制二叉树的C语言实现