码迷,mamicode.com
首页 > 其他好文 > 详细

学习总结(1)

时间:2020-05-01 01:14:13      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:src   ==   递归   can   链表   har   inf   ret   mic   

二叉树之查找指定节点所在的层数

在二叉树中实现查找,若查找的元素在二叉树中存在,则得出该元素所在的层数,若不存在,则得出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..

技术图片

学习总结(1)

标签:src   ==   递归   can   链表   har   inf   ret   mic   

原文地址:https://www.cnblogs.com/Monste/p/12811793.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!