二叉樹之查找指定節點所在的層數


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