【二叉树的顺序存储】
用一组地址连续的存储单元依次自上而下,自左至右存储完全二叉树上的结点元素,即将完全二叉树上编号为i的结点元素存储在一位数组下标为i-1的分量中
1.适于:完全二叉树、满二叉树
2.优点:树中结点的序号可以唯一的反应结点之间的逻辑关系,最大可能地节省了存储空间,又能利用数组元素的下标值确定结点在二叉树中的位置,以及结点之间的关系
3.缺点:对于一般的二叉树,需要添加一些并不存在的空结点,让其每个结点与完全二叉树上的结点相对照,会造成空间浪费,即使在结点数量较少时也需要申请大量空间
#define MaxSize 100
struct TreeNode {
ElemType value;//实际要存的数据元素
bool isEmpty;//该节点是否为空结点
};
TreeNode t[MaxSize];
for(int i=0;i<MaxSize;i++){
t[i].isEmpty=true;
}
【二叉树的链式存储】
用链表结点来存储二叉树中的每个结点。在二叉树中,结点结果通常包括若干数据域和若干指针域,二叉链表至少包含3个域:数据域data,左指针域lchild和右指针域rchild
1.优点:存储结构比价灵活,可以动态的申请空间,可以灵活的增加指针来存储信息,可以比较方便的找到左右孩子,减少了空间浪费
2.缺点:找父节点需要从根节点开始遍历,因此需要增加一个parent指针指向其父节点
typedef struct BiTNode {
ElemType data;
struct BiTNode* lchild, * rchild;
}BiTNode,*BiTree;