在二叉树中实现查找,若查找的元素在二叉树中存在,则得出该元素所在的层数,若不存在,则得出0。例如:在链式存储实现的二叉树中(以下图所示),查找元素。函数
1.若查找元素“H”,则得出所在层数4;code
2.若查找元素“S”,则得出0,表示该元素在树中不存在。blog
代码以下:递归
#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..