//树是一个n个结点的有限集, 如果n=0 那么称之为空树
//树的定义是递归的,树的定义中有用到了自身
//书的根节点没有前驱,除根节点意外,其他所有节点只有一个前驱
//书中的所有结点可以有0个或多个后驱
//二叉树
//一种特殊的树形结构
//每个结点至多只有两个子树
//前序 根- 左- 右
//中序 左 -根 -右
//后序 左 - 右 - 根
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode
{
char data;
struct TreeNode* lchild;
struct TreeNode* rchild;
}TreeNode;
int createTree(TreeNode** T)//遍历序列 data创建二叉树
//我们要改变一个指针指向的空间 因此要用到二级指针
//直接把scanf里面的\n去掉 再加一个getchar不好吗?
{
char ch;
scanf("%c", &ch);
getchar();
if(ch == '#')//此时为空结点
{
*T = NULL;
}
else//不为空,开辟空间
{
*T = (TreeNode*)malloc(sizeof(TreeNode));
if (NULL == *T)
{
printf("创建失败\n");
return NULL;
}
(*T)->data = ch;//*T结点的data分配内容
//创建&(*T->lchild)临时变量,传入create函数,构造左子树
createTree(&((*T)->lchild));
createTree(&((*T)->rchild));
}
}
void preOrder(TreeNode* T)
{
if (T == NULL)
{
return;
}
else
{
//先办事
printf("%c",T->data);
//处理左孩子
preOrder(T->lchild);
//处理右孩子
preOrder(T->rchild);
}
}
void inOrder(TreeNode* T)
{
if (T == NULL)
{
return;
}
else
{
//处理左孩子
preOrder(T->lchild);
//中办事
printf("%c", T->data);
//处理右孩子
preOrder(T->rchild);
}
}
void postOrder(TreeNode* T)
{
if (T == NULL)
{
return;
}
else
{
//处理左孩子
preOrder(T->lchild);
//处理右孩子
preOrder(T->rchild);
//后办事
printf("%c", T->data);
}
}
int main(int argc,char*argv[])
{
TreeNode* T;
int index = 0;
createTree(&T);
preOrder(T);
printf("\n");
inOrder(T);
printf("\n");
postOrder(T);
printf("\n");
return 0;
}
生成二叉树 进行遍历
最新推荐文章于 2024-11-11 09:41:37 发布
本文介绍了如何使用C语言定义二叉树结构,并展示了前序、中序和后序遍历的实现方法,通过createTree函数根据输入序列创建二叉树。
摘要由CSDN通过智能技术生成