二叉树的定义就不写了,不清楚了可以看书或者google下.
1,二叉树的存储结构
a,顺序存储结构
对于满二叉树和完全二叉树来说,可以将元素逐层放入一组连续的存储单元中,用数组来实现顺序存储结构时,可以将二叉树节点编号和数组的位置对应。如下图所示
数组对于完全二叉树和满二叉树是非常方便和高效的,但是对于一般的二叉树来说,缺点是相当明显的,因为是连续的存储的,所以需要把一般的二叉树用“虚节点”来补全为完全二叉树或者满二叉树,存储空间浪费巨大,可以看下图
那么对于这种二叉树,就有了下面的链式存储结构。
b,链式存储结构
在二叉树中每个节点都有两个孩子,
二叉链表:所以设计的节点结构最少得有三个域,数据域,左孩子域,右孩子域。这种设计情况的话,如果要查找父节点,得从根节点出发一一查找,为了方便查找父节点,所以有了下面一种节点的结构。
三叉链表:此种节点结构有四个域,数据域,左孩子域,指针域(指向节点的父节点),有孩子域。
在实际运用中,就根据实际操作来选择存储结构了。
下面来解释二叉树的先序遍历,中序遍历,后续遍历。
先序遍历:根节点--->左子树--->右子树
中序遍历:左子树--->根节点--->右子树
后续遍历:左子树--->右子树--->根节点
二叉树的先序,中序,后续遍历操作,只是访问根节点,左子树,右子树的顺序不同而已,递归执行过程是一样的。