www.pudn.com > datastructor.rar > BinaryTree.c
#include#include typedef char TElemType; typedef struct BiTnode{ TElemType data; struct BiTnode *lchild, *rchild; }BiTNode, *BiTree; void CreateBiTree(BiTree *T){ TElemType ch; printf("Enter element(enter '#' node is empty):\n"); ch = getchar(); if(ch == '#') *T = NULL; else{ *T = (BiTNode *)malloc(sizeof(BiTNode)); if(!(*T)) exit(-1); (*T)->data = ch; CreateBiTree( &(*T)->lchild ); CreateBiTree( &(*T)->rchild ); } } void DestroyBiTree(BiTree tree){ //BiTree T; //T = tree; //if(tree->lchild) tree = tree->lchild; //else tree = tree->rchild; //free(T); printf("Free tree.\n"); free(tree); } void Destroy(BiTree T){ if(T){ if(T->lchild) Destroy(T->lchild); if(T->rchild) Destroy(T->rchild); printf("Free tree.\n"); free(T); } } void PreOrderTraverse(BiTree T, void(* Visit)(BiTree Tree) ){ if(T){ Visit(T); PreOrderTraverse(T->lchild, Visit); PreOrderTraverse(T->rchild, Visit); } } void InOrderTraverse(BiTree T, void(* Visit)(BiTree Tree) ){ if(T){ PreOrderTraverse(T->lchild, Visit); Visit(T); PreOrderTraverse(T->rchild, Visit); } } void PostOrderTraverse(BiTree T, void(* Visit)(BiTree Tree) ){ if(T){ PreOrderTraverse(T->lchild, Visit); PreOrderTraverse(T->rchild, Visit); Visit(T); } } void PrintElement(BiTree T){ printf("%3c", T->data); } int main() { BiTree tree1; printf("Create tree:\n"); CreateBiTree(&tree1); printf("Pre Order Traverse tree:\n"); PreOrderTraverse(tree1, PrintElement); printf("\nIn Order Traverse tree:\n"); InOrderTraverse(tree1, PrintElement); printf("\nPost Order Traverse tree:\n"); PostOrderTraverse(tree1, PrintElement); printf("\nDestroy tree:\n"); //PostOrderTraverse(tree1, DestroyBiTree); Destroy(tree1); system("pause"); return 0; }