zoukankan      html  css  js  c++  java
  • 数据结构-树(上)

    • 树的表示:(法1)结构+链表

    *优点:结构统一,易于处理;

    *缺点:结构的统一会造成空间上的浪费,比如3n个指针域,实际只需n-1个指针域;

    • 树的表示:(法2)儿子-兄弟表示法(二叉树)

    *形式:1个结点2个指针,分别指向第1个儿子和下1个兄弟;

    *优点:结构统一,且空间浪费不大[为2n-(n-1)];

    *二叉树在树的研究中是最重要且最主要的树;

    • 二叉树的定义
    typedef struct TNode *Position;
    typedef Position BinTree;/*二叉树类型*/
    struct TNode /*树结点定义*/ 
    {
        ElementType Data;      /*结点数据*/
        BinTree Left;        /*指向左子树*/
        BinTree Right;        /*指向右子树*/     
    };

    *度为2的树,且该树有左右之分;

    *特殊的二叉树:

    斜二叉树:左斜或右斜,一条直线的链;

    完美二叉树(满二叉树):所有结点皆满;

    完全二叉树:(类似于满二叉树)上至下,左至右编号,且允许不满,且必须从右边开始缺子树;

    • 二叉树的重要性质:

    *二叉树第i层的最大结点数:2^(i-1);

    *深度为K的二叉树的最大结点总数(完美二叉树):[2^k]-1;

    *n0:叶结点的个数,n1:度为1的非叶结点的个数,n2:度为2的非叶结点的个数,满足:n0=n2+1;

    • 二叉树的操作集:

    (1)判断BT是否为空;

    (2)按顺序遍历;

    *先序遍历:根、左子树、右子树

    *中序遍历:左子树、根、右子树

    *后序遍历:左子树、右子树、根

    *层次遍历:从上到下、从左到右

    (3)创建一个二叉树;

    • 二叉树的存储结构:

    (1)完全二叉树(从上到下、从左到右编号)【数组存储】:

    *非根节点的父结点的序号为i/2往下取整;

    *结点的左孩子:2i;(若2i<=n)

    *结点的右孩子:2i+1;(若2i+1<=n)

    (2)一般的二叉树

    (可以采用上面这种顺序结构,但是会造成空间的浪费)【数组存储】

    (链表存储一般二叉树,避免浪费空间)【链表存储】

     

    hello world~
  • 相关阅读:
    MapReduce学习总结之简介
    Hive Cli相关操作
    使用Hive UDF和GeoIP库为Hive加入IP识别功能
    Google Maps-IP地址的可视化查询
    hive多表联合查询(GroupLens->Users,Movies,Ratings表)
    云计算平台管理的三大利器Nagios、Ganglia和Splunk
    机器大数据也离不开Hadoop
    hive与hbase的整合
    hive优化之------控制hive任务中的map数和reduce数
    Hadoop管理员的十个最佳实践(转)
  • 原文地址:https://www.cnblogs.com/Bran-don/p/10452834.html
Copyright © 2011-2022 走看看