经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 编程经验 » 查看文章
二叉树的存储结构
来源:cnblogs  作者:ambrose  时间:2019/10/8 9:09:26  对本文有异议

二叉树的存储结构

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

 

  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.    双亲链表:利用二叉树只有一个前驱的特性,也可以只设计一个指针域,让其指向该结点的前驱,为了区分左右结点,设置一个左右孩子标志域,即每个结点有三个标志域:数据域、、指针域、                                标志域。

原文链接:http://www.cnblogs.com/ambdyx/p/11632492.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号