
类别:公司新闻 发布时间:2025-07-06 22:11:04 浏览: 次
上一节讲了二叉树的顺序存储,通过学习你会发现,其实二叉树并不适合用数组存储,因为并不是每个二叉树都是完全二叉树,普通二叉树使用顺序表存储或多或多会存在空间浪费的现象。
如图 1 所示,此为一棵普通的二叉树,若将其采用链式存储,则只需从树的根节点开始,将各个节点及其左右孩子使用链表存储即可。因此,图 1 对应的链式存储结构如图 2 所示:
由图 2 可知,采用链式存储二叉树时,其节点结构由 3 部分构成(如图 3 所示):
#include stdio.h #include stdlib.h #define TElemType int typedef struct BiTNode{ TElemType data;//数据域 struct BiTNode *lchild,*rchild;//左右孩子指针 }BiTNode,*BiTree; void CreateBiTree(BiTree *T){ *T=(BiTNode*)malloc(sizeof(BiTNode)); (*T)-data=1; (*T)-lchild=(BiTNode*)malloc(sizeof(BiTNode)); (*T)-lchild-data=2; (*T)-rchild=(BiTNode*)malloc(sizeof(BiTNode)); (*T)-rchild-data=3; (*T)-rchild-lchild=NULL; (*T)-rchild-rchild=NULL; (*T)-lchild-lchild=(BiTNode*)malloc(sizeof(BiTNode)); (*T)-lchild-lchild-data=4; (*T)-lchild-rchild=NULL; (*T)-lchild-lchild-lchild=NULL; (*T)-lchild-lchild-rchild=NULL; } int main() { BiTree Tree; CreateBiTree(printf(%d,Tree-lchild-lchild-data); return 0; }
其实,二叉树的链式存储结构远不止图 2 所示的这一种。例如,在某些实际场景中,可能会做 查找某节点的父节点 的操作,这时可以在节点结构中再添加一个指针域,用于各个节点指向其父亲节点,如图 4 所示:
二叉树的前序遍历详解(图文并茂,C语言实现)二叉树的层次遍历(图文并茂,C语言实现)
Java遍历二叉树的3种方法(先序、中序和后序遍历)Java实现二叉树的线索化(非常详细)