#include<stdio.h>
#include<stdlib.h>
//树的定义(结点定义)
typedef char DataType;
typedef struct Node {
DataType data;
struct Node *lchild;
struct Node *rchild;
} BiNode,*BiTree;
//创建树的二叉链表(递归)
void CreateBiTree(BiTree *bt)
{
char ch;
ch = getchar();
if(ch=='.') *bt=NULL;
else
{
*bt= (BiNode *)malloc(sizeof(BiNode));
(*bt)->data=ch;
CreateBiTree(&((*bt)->lchild)); //生成左子树
CreateBiTree(&((*bt)->rchild)); //生成右子树
}
}
//输出二叉树的元素(先序)
void Print(BiTree bt)
{
if(bt==NULL)
return;
else
{
printf("%c ", bt->data);
Print(bt->lchild);
Print(bt->rchild);
}
}
int Search(BiTree T, DataType key)
{
int L,R;
if(T==NULL)//若是空树,则说明没有找到,得到0
return 0;
else//若不是空树
{
if(T->data==key)//若在根结点处找到,则得到层次1
return 1;
else//若在根结点处没有找到
L=Search(T->lchild, key);//往左子树找
if(L!=0)//若在左子树中找到,则层次为左子树中的层次+1
return L+1;
else
{
R=Search(T->rchild, key);//往右子树查找
if(R!=0)
return R+1;
else
return 0;
}
Search(T->lchild,key);//遍历左子树
Search(T->rchild,key);//遍历右子树
}
}
//主函数
void main()
{
char ch;
BiTree T;
printf("请输入结点:
");
CreateBiTree(&T);
Print(T);
printf("二叉树为:
");
getchar();
printf("
%d",Search(T, 'E'));
}