二叉树的创建及先序遍历中序遍历后序遍历
bittree.h#include <stdio.h>
#include <stdlib.h>
#define OK 1
typedef char TElemType;
typedef int Status;
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
Status CreatBitTree(BiTree &T)
{
TElemType ch;
scanf("%c",&ch);
if (ch=='#')
T=NULL;
else {
T=(BiTree)malloc(sizeof(BiTNode));
T->data=ch;
CreatBitTree(T->lchild);
CreatBitTree(T->rchild);
}
return OK;
}
Status PreOrderTraverse(BiTree T,Status (* Visit)(TElemType e))
{
if (T)
{
Visit(T->data);
PreOrderTraverse(T->lchild,Visit);
PreOrderTraverse(T->rchild,Visit);
}
return OK;
}
Status InOrderTraverse(BiTree T,Status (* Visit)(TElemType e))
{
if (T)
{
InOrderTraverse(T->lchild,Visit);
Visit(T->data);
InOrderTraverse(T->rchild,Visit);
}
return OK;
}
Status PostOrderTraverse(BiTree T,Status (* Visit)(TElemType e))
{
if (T)
{
PostOrderTraverse(T->lchild,Visit);
PostOrderTraverse(T->rchild,Visit);
Visit(T->data);
}
return OK;
}
Status PrintElem(TElemType e)//输出函数,这样写的目的很简单,如果要输出其他类型只需要修改这个函数即可
{
printf("%c",e);
return OK;
}
bittree.cpp
#include<bittree.h>int main()
{
BiTree tree;
Status (* Visit)(TElemType e);
Visit=PrintElem;
CreatBitTree(tree);
PreOrderTraverse(tree,Visit);//先序遍历
printf("\n");
InOrderTraverse(tree,Visit);//中序遍历
printf("\n");
PostOrderTraverse(tree,Visit);//后序遍历
printf("\n");
getchar();
getchar();
return 0;
}
测试数据:
/*
ABC##DE#G##F###
ABCDEGF
CBEGDFA
CGEFDBA
*/
二叉树的创建和遍历
自己写的,不太喜欢文字,对于看不懂的可以回复,我会第一时间回答你的问题!
这个很基础,对于需要学习二叉树的人来说,入门很好!
页:
[1]