二叉树之查找指定节点所在的层数


在二叉树中实现查找,若查找的元素在二叉树中存在,则得出该元素所在的层数,若不存在,则得出0。例如:在链式存储实现的二叉树中(如下图所示),查找元素。

 

1.若查找元素“H”,则得出所在层数4;

 

2.若查找元素“S”,则得出0,表示该元素在树中不存在。

 

代码如下:

 

#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);

}

}

//查找字符c在第几层

int Travel(BiTree T, int level,char c)

{

int l;

if (T)

{

if (T->data == c)

return level;

l = Travel(T->lchild, level + 1,c);

if (l != 0)return l;

else

{

return Travel(T->rchild, level + 1,c);

}

}

return 0;

}

//主函数

int main()

{

char c;

BiTree T;

printf("请输入结点:\n");

CreateBiTree(&T);

Print(T);

getchar();

printf("\n请输入要查找的结点:\n");

scanf("%c",&c);

printf("%d\n",Travel(T,1,c));

return 0;

}

//输入样例:AB.DF..G..C.E.H..

 

 

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM