层次遍历输出二叉树

利用层次遍历算法,输出二叉树的各个结点.说明:需事先利用括号扫描法创建一个二叉链bt,该二叉树bt的括号表示法对应的字符串为"A(B(D(G),H),C(E(F,I)))"

#include "stdio.h"
#include "stdlib.h"
#include "ctype.h"
#define Maxsize 20
typedef struct btnode{
	char data;
	struct btnode *lchild;
	struct btnode *rchild;
}BTNODE;

void init(BTNODE **bt);
void CreatBinaryTree(BTNODE **bt,char *str);
void printBinaryTree(BTNODE *bt);

int main(){	
	BTNODE *bt;
	char *str="A(B(D(G),H),C(E(F,I)))";	

	init(&bt);

	CreatBinaryTree(&bt,str);

	printBinaryTree(bt);
	printf("\n");
	return 0;	
}

void init(BTNODE **bt){
	*bt=NULL;
}

void CreatBinaryTree(BTNODE **bt,char *str){
	BTNODE *p=NULL,*stack[Maxsize];
	int i,top=-1,flag;

	for(i=0;str[i];i++){
		if(isalpha(str[i])){
			p=(BTNODE *)malloc(sizeof(BTNODE));
			p->data=str[i];
			p->lchild=NULL;
			p->rchild=NULL;
			if(*bt == NULL) {
				*bt=p;
			}else{
				switch(flag){
				case 1:stack[top]->lchild=p; break;
				case 2:stack[top]->rchild=p; break;
				}
			}
		}else{
			switch(str[i]){
			case '(':stack[++top]=p;flag=1;break;
			case ')':top--;break;
			case ',':flag=2;break;
			}
		}
	}
}

void printBinaryTree(BTNODE *bt){
	BTNODE *qu[Maxsize],*p;
	int rear=-1,front=-1;
	qu[++rear]=bt;
	while(rear!=front){
		front=(front+1)%Maxsize;
		p=qu[front];
		printf("%c",p->data);
		if(p->lchild!=NULL){
			rear=(rear+1)%Maxsize;
			qu[rear]=p->lchild;
		}
		if(p->rchild!=NULL){
			rear=(rear+1)%Maxsize;
			qu[rear]=p->rchild;
		}
	}
}


版权声明:本文为sugar516原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。