二叉树小程序

 今天做了一个二叉树的练习,以前感觉二叉树的树图和黑漆漆的命令行没有多大的关联,可事实表明命令行的输入和树的节点是一一对应的(如果程序的输入都正确的话)。

/* 标准文档模板 */ #include "Stdio.h" #include "Conio.h" typedef struct node1 { char data; struct node1 *lchild,*rchild; }Btchinalr; Btchinalr *createbt() { Btchinalr *q; struct node1 *s[30]; int i,j; char x; printf("i,x=");scanf("%d,%c",&i,&x); while(i!=0&&x!='$') { q=(Btchinalr*)malloc(sizeof(Btchinalr)); q->data=x; q->lchild=NULL;q->rchild=NULL; s[i]=q; if(i!=1) { j=i/2; if(i%2==0) s[j]->lchild=q; else s[j]->rchild=q; } printf("i,x=");scanf("%d,%c",&i,&x); } return s[1]; } void preorder(Btchinalr* bt)/*先序遍历*/ { if(bt!=NULL) { printf("%c ",bt->data); preorder(bt->lchild); preorder(bt->rchild); } } void inorder(Btchinalr* bt)/*中序遍历*/ { if(bt!=NULL) { inorder(bt->lchild); printf("%c ",bt->data); inorder(bt->rchild); } } void posorder(Btchinalr* bt)/*后序遍历*/ { if(bt!=NULL) { posorder(bt->lchild); posorder(bt->rchild); printf("%c ",bt->data); } } int main(void) { /* 此处添加你自己的代码 */ Btchinalr *bt=createbt(); printf("preorder:/n"); preorder(bt); printf("/ninorder:/n"); inorder(bt); printf("/nposorder:/n"); posorder(bt); getch(); return 0; }

二叉树图:

二叉树小程序_第1张图片

命令行输入的信息和相应的结果:

二叉树小程序_第2张图片可耻地错了一半,不过已经让我改过来了,有图中inorder的结果是错的,不过其他是对的,运行也大概这个结果。

你可能感兴趣的:(二叉树小程序)