Description
设二叉树的存储结构为二叉链表。在二叉链表中的每个结点由三部分组成:左孩子指针、右孩子指针和结点数据,其中如果一个结点的左右孩子不存在,则对应的指针记录为空,空指针用字符^占位。
Input
输入包括两行:
第一行:一棵非空的二叉树,每棵二叉树按先序遍历形式,空指针用字符^占位。
第二行:要查找的指定结点
测试时,每棵树不会超过20个结点。
Output
返回指定结点所在的层次,如果没找到该结点返回0。
Sample Input
ABD^^CEF^
C
Sample Output
2
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct Node {
char data;
struct Node* lchild;
struct Node* rchild;
}BitNode, *BiTree;
void CreateBiTree(BiTree* T)
{
char ch;
scanf("%c", &ch);
if (ch == '^')
{
*T = NULL;
}
else
{
*T = (BiTree)malloc(sizeof(BitNode));
if (!(*T))
{
exit(-1);
}
(*T)->data = ch;
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
}
}
int getNodelayer (BiTree T,int level,char key)
{
int l;
if(T)
{
if(T->data == key)
{
return level;
}
l = getNodelayer (T->lchild,level+1,key);
if(l != 0)
{
return l;
}
else
{
return getNodelayer (T->rchild,level+1,key) ;
}
}
return 0;
}
int getBiTreeNodeLayer(BiTree T, char key)
{
int level = 1;
return getNodelayer(T,level,key);
}
int main()
{
BiTree T1;
CreateBiTree(&T1);
char a;
int layer;
getchar();
scanf("%c",&a);
layer = getBiTreeNodeLayer(T1,a);
printf("%d",layer);
return 0;
}