二叉树的创建与遍历(递归创建与遍历)
代码如下:
#include<stdio.h> #include<malloc.h> #include<stdlib.h> #define MaxSize 100 typedef struct BiNode { int data; struct BiNode *lchild, *rchild; }BiNode, *BiTree; int TreeCreated = false; int CreatBiTree(BiTree *T); int PreOrderTree(BiTree T); int InOrderTree(BiTree T); int PostOrderTree(BiTree T); int main() { int choice = 0; int leave = 0, flag; BiNode *BT; printf("/n---------------二叉树演示程序-------------------/n"); do { printf("1.常见一个二叉树,按先序遍历结果输入,空用0表示/n"); printf("2.先序遍历二叉树,递归方式遍历二叉树/n"); printf("3.中序遍历二叉树,递归方式遍历二叉树/n"); printf("4.后序遍历二叉树,递归方式遍历二叉树/n"); printf("0.Quit/n"); printf("------------Input your selection:"); scanf("%d", &choice); switch (choice) { case 1: { if(TreeCreated) { printf("Sorry,the tree has been already created!/n"); break; } printf("Please put in number:/n"); flag = CreatBiTree(&BT); if(flag) { printf("Okey,Now a tree named BT is cerated.../n"); TreeCreated = true; } break; } case 2: { if(!TreeCreated) { printf("Sorry, you must create a tree for further steps!/n"); break; } printf("pre order:"); PreOrderTree(BT); printf("/n"); break; } case 3: { if(!TreeCreated) { printf("Sorry, you must create a tree for further steps!/n"); break; } printf("in order:"); InOrderTree(BT); printf("/n"); break; } case 4: { if(!TreeCreated) { printf("Sorry, you must create a tree for further steps!/n"); break; } printf("post order:"); PostOrderTree(BT); printf("/n"); break; } case 0: { leave = 1; break; } } }while(!leave); printf("Thanks for using, bye bye!/n"); return 0; } int CreatBiTree(BiTree *T) { int ch = 0; scanf("%d", &ch); if(ch == 0) (*T) = NULL; else { (*T) = (BiTree) malloc (sizeof(BiNode)); (*T)->data = ch; CreatBiTree(&(*T)->lchild); CreatBiTree(&(*T)->rchild); } return 1; } int PreOrderTree(BiTree T) { if(T) { printf("%3d,", T->data); PreOrderTree(T->lchild); PreOrderTree(T->rchild); return 1; } else return 0; } int InOrderTree(BiTree T) { if(T) { InOrderTree(T->lchild); printf("%3d,", T->data); InOrderTree(T->rchild); return 1; } else return 0; } int PostOrderTree(BiTree T) { if(T) { PostOrderTree(T->lchild); PostOrderTree(T->rchild); printf("%3d,", T->data); return 1; } else return 0; }
553

被折叠的 条评论
为什么被折叠?



