1. 程式人生 > >【資料結構】二叉樹的建立與遍歷(遞迴)

【資料結構】二叉樹的建立與遍歷(遞迴)

該程式全是使用遞迴的操作

執行環境是:Dev-C++

#include <stdio.h>
#include <stdlib.h>
typedef struct node{
	char data;
	struct node *lchild,*rchild;
}bintnode;

typedef bintnode *bintree;

typedef struct stack{
	bintree data[100];
	int tag[100];
	int top;
}seqstack;

void push(seqstack *s,bintree t)
{
	s->data[s->top]=t;
	s->top++;
}

bintree pop(seqstack *s)
{
	if(s->top!=0)
	{
		s->top--;
		return (s->data[s->top]);
	}
	else
	{
		return  NULL;
	}
}

bintree node;

bintree createbintree()
{
	char ch;
	bintree t;
	if((ch=getchar())=='#')
	{
		t=NULL;
	}
	else
	{
		t=(bintnode *)malloc(sizeof(bintnode));
		t->data=ch;
		t->lchild=createbintree();
		t->rchild=createbintree();
	}
	return t;
}

//遞迴的前序遍歷,中序遍歷,後序遍歷 
void preorder(bintree t)
{
	if(t)
	{
		printf("%c ",t->data);
		preorder(t->lchild);
		preorder(t->rchild);
	}
}

void inorder(bintree t)
{
	if(t)
	{
		inorder(t->lchild);
		printf("%c ",t->data);
		inorder(t->rchild);
	}
}

void postorder(bintree t)
{
	if(t)
	{
		postorder(t->lchild);
		postorder(t->rchild);
		printf("%c ",t->data);
	}
}

int main ()
{
	node = createbintree();
	postorder(node); 
	return 0;
}