在二叉樹中實現查找,若查找的元素在二叉樹中存在,則得出該元素所在的層數,若不存在,則得出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..