利用层次遍历算法,输出二叉树的各个结点.说明:需事先利用括号扫描法创建一个二叉链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版权协议,转载请附上原文出处链接和本声明。