二叉树的建立与遍历
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef char TElemType;
//结构定义
typedef struct BiTNode
{
TElemType data; //结点数据
struct BiTNode *lchild,*rchild; //左右孩子指针
} BiTNode,*BiTree;
//前序遍历
void PreOrderTraverse(BiTree T)
{
if(T)
{
printf("%c",T->data);
PreOrderTraverse(T->lchild);//先序遍历左子树
PreOrderTraverse(T->rchild);//先序遍历右子树
}
}
//中序遍历递归算法
void InOrderTraaverse(BiTree T)
{
if(T)
{
InOrderTraaverse(T->lchild);//中序遍历左子树
printf("%c",T->data);
InOrderTraaverse(T->rchild);//中序遍历右子树
}
}
//后序遍历递归算法
void PostOrderTraverse(BiTree T)
{
if(T)
{
PostOrderTraverse(T->lchild);//后序遍历左子树
PostOrderTraverse(T->rchild);//后序遍历右子树
printf("%c",T->data);
}
}
//建立二叉树
void createBiTree(BiTree &T)
{
TElemType ch;
scanf("%c",&ch);
if(ch=='#')
T=NULL;
else
{
T=(BiTree)malloc(sizeof(BiTNode));
T->data=ch;
createBiTree(T->lchild);
createBiTree(T->rchild);
}
}
int main()
{
BiTree T;
createBiTree(T);
printf("二叉树创建完成!\n");
printf("前序遍历二叉树:\n");
PreOrderTraverse(T);
printf("\n");
printf("中序遍历二叉树:\n");
InOrderTraaverse(T);
printf("\n");
printf("后序遍历二叉树:\n");
PostOrderTraverse(T);
return 0;
#include<string.h>
#include<stdlib.h>
typedef char TElemType;
//结构定义
typedef struct BiTNode
{
TElemType data; //结点数据
struct BiTNode *lchild,*rchild; //左右孩子指针
} BiTNode,*BiTree;
//前序遍历
void PreOrderTraverse(BiTree T)
{
if(T)
{
printf("%c",T->data);
PreOrderTraverse(T->lchild);//先序遍历左子树
PreOrderTraverse(T->rchild);//先序遍历右子树
}
}
//中序遍历递归算法
void InOrderTraaverse(BiTree T)
{
if(T)
{
InOrderTraaverse(T->lchild);//中序遍历左子树
printf("%c",T->data);
InOrderTraaverse(T->rchild);//中序遍历右子树
}
}
//后序遍历递归算法
void PostOrderTraverse(BiTree T)
{
if(T)
{
PostOrderTraverse(T->lchild);//后序遍历左子树
PostOrderTraverse(T->rchild);//后序遍历右子树
printf("%c",T->data);
}
}
//建立二叉树
void createBiTree(BiTree &T)
{
TElemType ch;
scanf("%c",&ch);
if(ch=='#')
T=NULL;
else
{
T=(BiTree)malloc(sizeof(BiTNode));
T->data=ch;
createBiTree(T->lchild);
createBiTree(T->rchild);
}
}
int main()
{
BiTree T;
createBiTree(T);
printf("二叉树创建完成!\n");
printf("前序遍历二叉树:\n");
PreOrderTraverse(T);
printf("\n");
printf("中序遍历二叉树:\n");
InOrderTraaverse(T);
printf("\n");
printf("后序遍历二叉树:\n");
PostOrderTraverse(T);
return 0;
}