學習總結(1)

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

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

相關文章
相關標籤/搜索