先序的方法建立二叉树(链表)
typedef struct BiTNode{
char data;
struct BiTNode *lchild;
struct BiTNode *rchild;
}BiTNode, *BiTree;
BiTree CreateBiTree(BiTree T){
char ch;
scanf("%c", &ch);
if(ch == ' ') T = NULL;
else{
T = (BiTNode *)malloc(sizeof(BiTNode));
T->data = ch;
T->lchild = CreateBiTree( T->lchild);
T->rchild = CreateBiTree( T->rchild);
}
return T;
}
三种顺序遍历二叉树,并且寻找相应的值,返回其所在的层数
void visit(char c, int level){
printf("正在查找...\n");
if(c == 'D')
{
printf("已经找到:\n");
printf("%c is at %d level of BiTree\n", c, level);
}
}
void PreOrderTraverse(BiTree T, int level){
if(T){
printf("正在先序遍历二叉树...\n");
visit(T->data, level);
PreOrderTraverse(T->lchild, level+1);
PreOrderTraverse(T->rchild, level+1);
}
}
void InOrderTraverse(BiTree T, int level){
if(T){
printf("正在中序遍历二叉树...\n");
InOrderTraverse(T->lchild, level + 1);
visit(T->data, level);
InOrderTraverse(T->rchild, level + 1);
}
}
void PosOrderTraverse(BiTree T, int level){
if(T){
printf("正在后序遍历二叉树...\n");
PosOrderTraverse(T->lchild, level + 1);
PosOrderTraverse(T->rchild, level + 1);
visit(T->data, level);
}
}
主函数
int main(){
BiTree T = NULL;
int level = 1;
T = CreateBiTree(T);
PreOrderTraverse(T, level);
InOrderTraverse(T, level);
PosOrderTraverse(T, level);
getchar();
getchar();
getchar();
}