• 数据结构:二叉树的储存及遍历


    线型

           表:线型的特点无特殊要求

                  顺序:查询,修改方便,插入,删除不方便,定长浪费空间

                链式:查询,修改不方便,插入,删除方便,节约空间灵活

           栈:满足线型的条件下,还要满足先进后出

                  顺序:定长浪费空间

                  链式:节约空间灵活

           队列:满足线型的条件下,还要满足先进先出

                顺序:定长浪费空间

                链式:节约空间灵活

    n(n>=0)个结点的集合,这些节点互不相交,有一个根节点

                            根节点没有直接前驱,有n(>=0)个直接后继

                其他节点,有唯一之前前驱,有n(>=0)个直接后继

         

          层次:根节点开始依次向下计数

          树的深度:最大层次节点的层次

          度:直接后继的个数

          树的度:最大度

          叶子节点/外部节点:度为0

          分支节点/内部节点:度不为0

          关系:双亲,兄弟,堂兄弟,祖先

    二叉树:

    由一个根节点,和左右两颗子树组成,并且这两颗子树又是二叉树;度最大为2;需要区分左右的顺序。 

    满二叉树:

    有K层的树,节点总数为2^k – 1

    完全二叉树1.只有最后两层有叶子节点

                2.并且叶子节点在左部连续

                          

    霍夫曼树,平衡二叉树,红黑树,B树,B+树,A树,233树

    存储

                顺序存储:根节点为n,左孩子为2n+1,右孩子为2n+2

                链式存储:

    遍历

              层次遍历

                先序遍历   (根左右)

                中序遍历   (左根右)

                后序遍历   (左右根)

    1. #ifndef _SQTREE_H
    2. #define _SQTREE_H
    3. #define N 1024
    4. typedef char sqtree_data_t;
    5. typedef struct sqtree{
    6. sqtree_data_t buf[N];
    7. int len;
    8. }sqt_node,*sqt_pnode;
    9. //创建空间
    10. sqt_pnode create_space();
    11. //创建树
    12. int create_sqtree(sqt_pnode T, int pos);
    13. //打印树
    14. int show_sqtree(sqt_pnode T);
    15. #endif
    1. #include
    2. #include
    3. #include "sqtree.h"
    4. sqt_pnode create_space()
    5. {
    6. sqt_pnode T = (sqt_pnode)malloc(sizeof(sqt_node));
    7. if(NULL == T)
    8. {
    9. printf("T is NULL\n");
    10. return NULL;
    11. }
    12. T->len = 0;
    13. return T;
    14. }
    15. int create_sqtree(sqt_pnode T, int pos)
    16. {
    17. sqtree_data_t ch;
    18. scanf("%c", &ch);
    19. //退出条件
    20. if(ch == '$')
    21. {
    22. T->buf[pos] = '#';
    23. T->len++;
    24. return 0;
    25. }
    26. T->buf[pos] = ch;
    27. T->len++;
    28. //创建左子树
    29. create_sqtree( T, 2*pos+1);
    30. //创建右子树
    31. create_sqtree(T, 2*pos+2);
    32. return 0;
    33. }
    34. int show_sqtree(sqt_pnode T)
    35. {
    36. if(NULL == T)
    37. {
    38. printf("T is NULL\n");
    39. return -1;
    40. }
    41. if(T->len == 0)
    42. {
    43. printf("T is empty\n");
    44. return -1;
    45. }
    46. int i;
    47. for(i = 0; i < T->len; i++)
    48. {
    49. printf("buf[%d]=%c ", i, T->buf[i]);
    50. }
    51. puts("");
    52. return 0;
    53. }
    1. int main()
    2. {
    3. sqt_pnode T = create_space();
    4. create_sqtree(T,0);
    5. show_sqtree(T);
    6. }

  • 相关阅读:
    基于javaweb+jsp的医院住院管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Layui Ajax)
    【C++程序员必修第一课】C++基础课程-13:std::vector 动态数组
    Ubuntu配置NFS服务器(Linux挂载Linux)
    电子技术基础(三)__第6章 组合逻辑电路第5篇___编码器
    中高级Java程序员,你不得不掌握的基本功,挑战20k+
    电子宣传册制作攻略,打造完美视觉效果
    “突然降级到 iPhone 11 Pro Max 的我,好像……也没有错过什么?”
    LBA逻辑区块地址
    聚丙烯酸(PAA)修饰纳米Fe3O4四氧化三铁粒子|CNTs/Fe3O4/TiO2纳米复合材料(齐岳)
    SpringBoot bbs (二) 抓取标签<img>并且打包
  • 原文地址:https://blog.csdn.net/qq_63626307/article/details/126334314