码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 1. 树的建立与基本操作


    程序的输入是一个表示树结构的广义表。假设树的根为 root ,其子树森林 F = ( T1 , T2 , … , Tn ),设与该树对应的广义表为 L ,则 L =(原子,子表 1 ,子表 2 , … ,子表 n ),其中原子对应 root ,子表 i ( 1

    程序的输出为树的层次结构、树的度以及各种度的结点个数。

    在输出树的层次结构时,先输出根结点,然后依次输出各个子树,每个子树向里缩进 4 个空格,如:针对上图表示的树,输出的内容应为:

    a

        b

            c

            d

        f

            g

            h

            i

    Degree of tree: 3

    Number of nodes of degree 0: 5

    Number of nodes of degree 1: 0

    Number of nodes of degree 2: 2

    Number of nodes of degree 3: 1

    例: (下面的黑体为输入)

    (a,(b),(c,(d),(e,(g),(h )),(f)))

    a

        b

        c

            d

            e

                g

                h

            f

    Degree of tree: 3

    Number of nodes of degree 0: 5

    Number of nodes of degree 1: 0

    Number of nodes of degree 2: 2

    Number of nodes of degree 3: 1


    C代码 

    1. #include
    2. int main() {
    3. char inputChar, label[100]; //定义输入字符和标签数组
    4. int count = 0, level[100], degree[100] = { 0 }, degreeCount[100] = { 0 }; //定义计数器、等级数组、度数组和度计数数组
    5. int currLevel = -1, i, j, maxDegree = 0; //定义当前等级、循环变量和最大度
    6. while (1)
    7. {
    8. inputChar = getchar();
    9. if (inputChar == '\n') break;
    10. switch (inputChar)
    11. {
    12. case '(': currLevel++; break; //左括号,当前等级增加
    13. case ')': currLevel--; break; //右括号,当前等级降低
    14. case ',': break; //逗号,不改变等级
    15. default:
    16. count++;
    17. label[count] = inputChar;
    18. level[count] = currLevel;
    19. break; //其他字符,当作节点标签,将其存入数组,并标记其等级
    20. }
    21. }
    22. //打印树状结构图
    23. for (i = 1; i <= count; i++)
    24. {
    25. for (j = 0; j < level[i]; j++)
    26. printf(" ");//对于每一层,打印相应的缩进
    27. printf("%c\n", label[i]); //打印节点标签
    28. }
    29. //计算每个节点的度
    30. for (i = 1; i <= count; i++)
    31. {
    32. for (j = i + 1; j <= count; j++)
    33. {
    34. if (level[j] == level[i]) break; //如果相同等级的节点出现,跳出
    35. if (level[j] == level[i] + 1) //如果下一层级的节点出现,该节点的度加1
    36. degree[i]++;
    37. }
    38. }
    39. //找出最大的度
    40. for (i = 1; i <= count; i++)
    41. {
    42. if (degree[i] > maxDegree)
    43. maxDegree = degree[i];
    44. }
    45. //计算每个度的节点数
    46. for (i = 1; i <= count; i++)
    47. degreeCount[degree[i]]++;
    48. //输出度和节点数
    49. printf("Degree of tree: %d\n", maxDegree);
    50. for (i = 0; i <= maxDegree; i++)
    51. printf("Number of nodes of degree %d: %d\n", i, degreeCount[i]);
    52. return 0;
    53. }

  • 相关阅读:
    echarts进阶配置
    基于Java的飞机雷电射击游戏的设计实现(Eclipse开发)
    ARTS 第一期
    [Redis] Spring Boot 使用Redis---StringRedisTemplate
    【树莓派不吃灰】基础篇⑮ SSH远程访问安全,涉及/etc/hosts.allow白名单 和 /etc/hosts.deny黑名单、ufw防火墙、密钥登录
    java中分割字符串总结 - 超级无敌详细版本。不仅要熟悉各种方法还要做到灵活运用。
    日常学习收获之----react的ref和wrappedComponentRef的区别
    Linux启动过程详解
    企业小程序商城的推广方式有哪些_分享小程序商城的作用
    后河水利枢纽重力坝整体设计(说明书+计算书+文献综述+外文翻译及原文+cad图纸 )
  • 原文地址:https://blog.csdn.net/m0_74200772/article/details/133821973
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号