• 学习总结(1)


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

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

  • 相关阅读:
    线程池execute执行顺序
    三个线程交替打印1到100
    mysql优化
    最大回文子串
    AOP实现日志收集和记录
    LoadingCache缓存使用(LoadingCache)
    springboot项目在idea中实现热部署
    idea破解
    linux常用命令
    Oracle的分条件计数COUNT(我的条件),由浅入深
  • 原文地址:https://www.cnblogs.com/Monste/p/12811793.html
Copyright © 2020-2023  润新知