二叉树demo01
简单的二叉树的创建(前序输入)&前序遍历&中序遍历&后序遍历
#include <stdio.h>
#include <stdlib.h>
#define MAX 1024
typedef struct bitnode
{
int data;
struct bitnode *lchild;
struct bitnode *rchild;
}BinTree;
BinTree *Creat_Bintree()
{
BinTree *p;
int x;
scanf("%d",&x);
if(x==0)
{
p = NULL;
}
else
{
p = (BinTree *)malloc(sizeof(BinTree));
p->data=x;
p->lchild=Creat_Bintree();
p->rchild=Creat_Bintree();
}
return p;
}
void PreOrderTraversal(BinTree *r)
{
if(r)
{
printf("%d ",r->data);
PreOrderTraversal(r->lchild);
PreOrderTraversal(r->rchild);
}
}
void InOrderTraversal(BinTree *r)
{
if(r)
{
InOrderTraversal(r->lchild);
printf("%d ",r->data);
InOrderTraversal(r->rchild);
}
}
void LastOrderTraversal(BinTree *r)
{
if(r)
{
LastOrderTraversal(r->lchild);
LastOrderTraversal(r->rchild);
printf("%d ",r->data);
}
}
void NRPreOrder(BinTree *r)
{
BinTree *stack[MAX];
BinTree *p;
int top =-1;
if(r==NULL) return;
p=r;
while(p!=NULL||top!=-1)
{
while(p!=NULL)
{
printf("%d ",p->data);
top++;
stack[top]=p;
p=p->lchild;
}
if(top<0) return;
else
{
p=stack[top];
top--;
p=p->rchild;
}
}
}
int main()
{
BinTree *root;
root=Creat_Bintree();
printf("前序遍历:");
PreOrderTraversal(root);
printf("\n中序遍历");
InOrderTraversal(root);
printf("\n后序遍历");
LastOrderTraversal(root);
printf("\n非递归前序遍历:");
NRPreOrder(root);
return 0;
}
第一篇cnblog博文,开通博客审核通过,学生一枚,初来乍到。明天再改。。。