树的查找

#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);
    }

}

int find(BiTree bt,int h,char a)
 {
    int t;
    if(bt)
    {
        if(a==bt->data)
            return h;
        t=find(bt->lchild,h+1,a);           //再次调用函数,层数加一,到左孩子结点。
        if(t!=0)
            return t;
        else
            return find(bt->rchild,h+1,a); //再次调用函数,层数加一,到右孩子结点。
    }
        return 0;

 }



//主函数
void main()
{
    int l=1;
    BiTree T;
    printf("请输入二叉树:");
    CreateBiTree(&T);
    char ch;
    printf("请输入要查找的结点:");
    getchar();
    ch = getchar();
    Print(T);
    printf("\n%d\n",find(T,l,ch));
}

 

上一篇:实验四 二叉树


下一篇:DS二叉树的先序遍历及应用