#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 find(BiTree bt,int h,char a)
{
int t;
if(bt)
{
if(a==bt->data)
return h;
t=find(bt->lchild,h+1,a); //再次调用函数,层数加一,到左孩子结点。
if(t!=0)
return t;
else
return find(bt->rchild,h+1,a); //再次调用函数,层数加一,到右孩子结点。
}
return 0;
}
//主函数
void main()
{
int l=1;
BiTree T;
printf("请输入二叉树:");
CreateBiTree(&T);
char ch;
printf("请输入要查找的结点:");
getchar();
ch = getchar();
Print(T);
printf("\n%d\n",find(T,l,ch));
}