二叉树的存储结构

  1.   顺序存储
    1. #define MAX_TREE_SIZE 100    //二叉树最大节点数
    2.    typedef ElemType SqBiTree[MAX_TREE_SIZE];     //0号位存储根节点
    3.  SqBiTree t;
  2.        二叉树的顺序存储就是用一组地址连续的存储单元来存放二叉树的数据元素,C语言中常使用数组实现。
  3.        对于完全二叉树来说,采用顺序存储结构十分合适,因为它充分利用存储空间。但对于一般的二叉树,特别是那些单支结点(度为1)比较多的二叉树来说,空间浪费十分巨大。而且插入和删除也很不便,所以对于一般的二叉树,采用链式存储。

 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
  1.    链式存储:
  2.         由定义,二叉树的一个结点包括一个数据元素和左子树、右子树的指针组成,所以二叉链表中结点至少有三个域,左右指针域、数据域。
  3.    typedef struct BiTNode
  4.   { 
  5.              ElemType data;             //数据
  6.              struct BiTNode *lchild,*rchild;
  7.        }BiNode,*BiTree;

 

  1.   n个结点的二叉链表有2n个指针域,其中非空指针域 n-1个。空指针域n+1个。这些空指针域存储其他信息我们可以得到线索链表。
  2.        因为二叉链表访问孩子结点比较简单而访问父母结点需要遍历树,所以可以再结点中加入指向双亲的指针域,即得到三叉链表。
    1.    typedef struct TriTNode
    2.   { 
    3.              ElemType data;             //数据
    4.              struct TriTNode *lchild,*rchild;
    5.              struct TriTNode *parent;
    6.        }TriNode,*TriTree;
  3.    双亲链表:利用二叉树只有一个前驱的特性,也可以只设计一个指针域,让其指向该结点的前驱,为了区分左右结点,设置一个左右孩子标志域,即每个结点有三个标志域:数据域、、指针域、                                标志域。
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄