既然顺序存储适用性不强,我们就要考虑链式存储结构。二叉树每个结点最多有两个孩子,所以为它设计一个数据域和两个指针域是比较自然的想法,我们称这样的链表叫做二叉链表。结点结构图如表6-7-1所示。

    lchild data rchild

    其中data是数据域,lchild和rchild都是指针域,分别存放指向左孩子和右孩子的指针。

    以下是我们的二叉链表的结点结构定义代码。

    1. /* 二叉树的二叉链表结点结构定义 */
    2. /* 结点结构 */
    3. typedef struct BiTNode{
    4. /* 结点数据 */
    5. TElemType data;
    6. /* 左右孩子指针 */
    7. struct BiTNode *lchild, *rchild;
    8. } BiTNode, *BiTree;

    结构示意图如图6-7-5所示。
    image.png
    就如同树的存储结构中讨论的一样,如果有需要,还可以再增加一个
    指向其双亲的指针域,那样就称之为三叉链表。