赞
踩
二叉树一般有两种存储方式:(1)数组方式(2)链表方式
(1)数组存储方式
上面两个二叉树对应的链表存储为:
我们采用层序遍历的方式将二叉树各个节点进行编号(这里的编号我们是把二叉树均看成满二叉树进行编号的,这样编号的好处是方便我们根据编号轻松定位节点位置),并将节点数据存放在对应编号下。
我们可以看出对于满二叉树(就是除了叶结点外每一个结点都有左右子叶且叶结点都处在最底层的二叉树)。是很适合用数组存储的,但是对于非满二叉树,如果我们用数组方式存放就会浪费存储空间。如果二叉树非常庞大,这部分的浪费将是巨大的。所以一般情况下,我们更普遍的采用链式存储结构存储二叉树。
(2)二叉树链表
二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。
通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。其结点结构为:
其中,data域存放某结点的数据信息;lchild与rchild分别存放指向左孩子和右孩子的指针,当左孩子或右孩子不存在时,相应指针域值为空(用符号∧或NULL表示)。利用这样的结点结构表示的二叉树的链式存储结构被称为二叉链表。如下图所示:
为了方便访问某结点的双亲(节点的子节点和父节点),还可以给链表结点增加一个双亲字段parent,用来指向其双亲结点。每个结点由四个域组成,其结点结构为:
这种存储结构既便于查找孩子结点,又便于查找双亲结点;但是,相对于二叉链表存储结构而言,它增加了空间开销。利用这样的结点结构表示的二叉树的链式存储结构被称为三叉链表。如下图所示:
二叉链表结构灵活,操作方便,对于一般情况的二叉树,甚至比顺序存储结构还节省空间。因此,二叉链表是最常用的二叉树存储方式。
struct BinTreeNode //定义节点由数据域,左右指针组成 { int data; BinTreeNode *lchild,*rchild; }Bitree;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。