标签:src == 递归 can 链表 har inf ret mic
在二叉树中实现查找,若查找的元素在二叉树中存在,则得出该元素所在的层数,若不存在,则得出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..
标签:src == 递归 can 链表 har inf ret mic
原文地址:https://www.cnblogs.com/Monste/p/12811793.html