zoukankan      html  css  js  c++  java
  • 数据结构 (树,图)



    数据结构

    二叉树
    定义,最多有两个子节点
    特点,每层节点数,总共节点数。
    特殊的二叉树,满,完全,非完全
    节点编号,根节点为1,完全二叉树特性
    二叉树数组存储
    二叉树链式存储结构
    typedef struct node{
        int data;
        struct node * pLeft;
        struct node * pRight;
    };

    二叉树遍历,基于链式存储结构
    递归遍历,按照访问根节点的顺序分3种:先,中,后
    非递归遍历,
    先跟遍历:先访问更节点,然后右节点入栈,左节点入栈,出栈一个,再右节点入栈,左节点入栈,这样循环
    中根遍历,左子节点入栈,为空时开始出栈,访问出栈节点,按照递推规则访问右子节点。
    层序遍历,根节点入队列,访问队列,在把节点的左右子节点入队列。

    最优二叉树
    定义:带权路径长度最小。带权路径长度是所有叶子节点的带权路径之和。
    构造哈夫曼树:从n个叶子节点开始,构造一颗哈夫曼树。
    存储结构:
    typedef struct node{
        char ch;
        int parentIndex;
        int weight;
        int leftChild;
        int rightchild;
    }HuffmanTree[2*n];

    用数组结构来存放,前半部分存放叶子节点,后半部分存放中间节点。构造时根据父节点是否为空开判断这各节点是否已经被使用。

    树和森林
    几种表示方法
    双亲,孩子,孩子兄弟


    定义:点与连接点的边组成的集合。
    分类:无向图,有向图,完全图
    概念:度,出度,入度,路径
    存储方式:
    邻接矩阵
    typedef struct node{
    int index;
    struct arc *pArc;
    }Node[n];

    typedef struct arc{
        int weight;
        int destNode;
        struct arc *pNextArc;
    };
    图的遍历,要有一个数组保存节点是否访问状态。
    深度采用递归算法。
    广度采用队列,类似树的层序遍历

    最小生成树
    普利姆算法
    克鲁斯卡尔算法

    AOV网络
    拓扑排序:选入度为0的点,从图中删除这些点以及与之相邻的边,重复这个过程。
    两种结果:可以选出所有的点,不能选出所有的点(存在回路的情况)
    DAG图:不存在回路的图
    AOE网络,带权
    关键路径与关键活动




  • 相关阅读:
    HDU 5937 Equation(DFS+剪枝)
    HDU 5733 tetrahedron(计算几何)
    BZOJ2243 [SDOI2011]染色(树链剖分+线段树合并)
    计蒜客 微软大楼设计方案(RMQ)
    Codeforces 804D Expected diameter of a tree(树的直径 + 二分 + map查询)
    Codechef Black Nodes in Subgraphs(树型背包)
    2017年暑假集训前的反省
    Codeforces 599E Sandy and Nuts(状压DP)
    Codeforces 570D Tree Requests(树上启发式合并)
    搭建MHA
  • 原文地址:https://www.cnblogs.com/mingzhang/p/7569764.html
Copyright © 2011-2022 走看看