#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:6031)
#include <stdio.h>
#include <stdlib.h>
typedef struct bitree
{
int data;
struct bitree* lchild, * rchild;//左,右孩子
struct bitree* parent;//双亲节点
}*bitree, binode;//树,节点
void creatbitree(bitree* T)//创建
{
*T = (binode*)malloc(sizeof(binode));//根节点
(*T)->data = 1;
(*T)->lchild = (binode*)malloc(sizeof(binode));//根节点左孩子
(*T)->lchild->data = 2;
(*T)->rchild = (binode*)malloc(sizeof(binode));//根节点右孩子
(*T)->rchild->data = 3;
(*T)->lchild->lchild = (binode*)malloc(sizeof(binode));//根节点左孩子的左孩子
(*T)->lchild->lchild->data = 4;
(*T)->lchild->lchild->lchild = NULL;//左左左
(*T)->lchild->lchild->rchild = NULL;//左左右
(*T)->lchild->rchild = NULL;//左右
(*T)->rchild->lchild = NULL;//右左
(*T)->rchild->rchild = NULL;//右右
}
void display(binode* elem)//输出数据
{
printf("%d\n", elem->data);
}
void preordertraverse(bitree T)//先序遍历
{
if (T != NULL)
{
display(T);//根
preordertraverse(T->lchild);//左
preordertraverse(T->rchild);//右
}
}
void inordertraverse(bitree T)//中序遍历
{
if (T != NULL)
{
inordertraverse(T->lchild);//左
display(T);//根
inordertraverse(T->rchild);//右
}
}
void postordertraverse(bitree T)//后序遍历
{
if (T != NULL)
{
postordertraverse(T->lchild);//左
postordertraverse(T->rchild);//右
display(T);//根
}
}
int main()
{
bitree tree;
creatbitree(&tree);//创建二叉树
/*
草图:
1
/ \
2 3
/ \ / \
4
*/
printf("开始先序遍历:\n");
preordertraverse(tree);
printf("开始中序遍历:\n");
inordertraverse(tree);
printf("开始后序遍历:\n");
postordertraverse(tree);
return 0;
}
C语言二叉树先中后三种遍历操作演示
最新推荐文章于 2024-09-09 10:24:53 发布