zoukankan      html  css  js  c++  java
  • c语言数据结构学习心得——树

    一对多的树型结构,有且只有一个特定的根结点。

    结点的度:结点拥有子树的数量{

                                           度为0:叶子结点/终端结点。

                                           度不为0:非终端结点/分支结点(除去根结点其它称为内部结点)。}

    树的度:树中所有结点的度数的最大值。

    树的层次:根为第一层,以此类推。

    结点的深度:根结点开始,自顶向下累加。

    结点的高度:叶结点开始,自底向上累加。

    树的高度(深度):树中结点的最大层数。

    结点关系:

    祖先结点:根结点到该点的唯一路径上的任意结点。

    子孙结点

    双亲结点:根结点到该点的唯一路径上的最近结点。

    孩子结点

    兄弟结点:有相同双亲结点的结点。

    树中的数学关系:

    1.树中的结点数等于所有结点的度数加1。

    2.度为m的树中第i层上最多有mi-1个结点。

    3.高度为h的m叉树至多有(mn-1)/(m-1)个结点。

    4.具有n个结点的m叉树的最小高度为[logm(n(m-1)+1)]

    树的存储结构

    顺序存储结构

    双亲表示法:用一组连续的存储空间存储树的结点,同时在每个结点中,用一个变量存储该结点双亲结点在数组中的位置。typedef char ElemType;

    typedef struct TNode{
         ElemType data;           //结点数据
         int parent;              //该结点双亲在数组的下标
    }TNode;                       //结点数据类型

    #define MaxSize 100
    typedef struct{
    TNode nodes[MaxSize]; //结点数组
    int n; //结点数量
    }Tree; //树的双亲表示结构

    链式存储结构

    孩子表示法:把每个结点的孩子结点排列起来存储成1个单链表,所以n个结点有n个链表;

                          叶子结点链表为空;

                          n个单链表的头指针又存储在一个顺序表(数组)中。

    孩子链表结点代码:

    typedef char ElemType;
    typedef struct CNode{
       int child;         //该孩子在表头的数组下标
       struct CNode *next;//指向该结点的下一个孩子结点
    }CNode,*child         //孩子结点数据类型

    每个孩子链表的表头结点(存在数组中):

    typedef struct{
        ElemType data;    //结点数据域
        child first child;//指向该结点的第一个孩子结点
    }TNode;               //孩子结点的数据类型
    #define MaxSize 100
    typedef struct{
         TNode nodes[MaxSize];//结点数据域
         int n;               //树中结点数量
    }Tree;                    //树的孩子表示结构

    孩子兄弟表示法:存储孩子结点和兄弟结点。

    typedef char ElemType;
    typedef struct CSNode{
       ElemType data;                   //该结点数据域
       struct CSNode *firsrchild,*right;//指向该结点的第一个孩子结点和该结点的右兄弟结点
    }CSNode                             //孩子兄弟结点数据类型
  • 相关阅读:
    css常用小知识点汇总(一)
    TweenMax的GSAP(GreenSock动画平台)GSAP,专业的Web动画库
    前端node面试题之---对比JS和NodeJS的区别
    Math.min() Math.max() Math.min().apply() Math.max() .apply()该如何使用???
    zrender的线性渐变
    webkit内核的浏览器常见7种分别是..
    node创建项目,要ejs模板引擎,不要jade怎么办?
    【正则】——深入正则表达式,手写常用正则表单验证
    【bug】—— ios scroll 滚动穿透
    【bug】—— H5页面在 ios 端滑动不流畅的问题
  • 原文地址:https://www.cnblogs.com/suprechen/p/10602133.html
Copyright © 2011-2022 走看看