链存储结构存储的
递归思维遍历二叉树
如上所述,树由根节点和子树的部分构成,对每个树来说,可以分为左子树、根节点和右子树三个部分。 因此,可以使用递归思想顺序遍历每个节点。
根据访问节点的时间,有三种遍历方式。
在访问根节点后遍历左右子树称为“向前遍历”。
遍历左侧子树,然后访问根节点,然后遍历右侧子树,这称为“中继遍历”;
遍历左右两个子树后访问根节点称为“后续遍历”。
三种方式唯一的区别是接入节点的定时差异,要给出一个二叉树,首先要明确通过三种遍历方式接入节点的顺序。
图2二叉树的扫描图像
在图2中,箭头线的运动是穿过节点的过程:
遍历是当线到达该节点的左侧时操作该节点。 因此,操作节点的顺序如下。
1 2 4 5 3 6 7
中序扫描在线越过该节点的左部分的树到达该节点的正下方时操作该节点。 因此,操作节点的顺序如下。
4 2 5 1 6 3 7
当线完全穿过该节点的左右子树并且到达该节点的右侧范围时,遍历开始操作该节点。 因此,操作节点的顺序如下。
4 5 2 6 7 3 1
三种遍历方式的完整代码实现
#包含
#包含
#define TElemType int
//创建节点的结构体
typedef struct BiTNode{
t elemtype数据; //数据域
struct BiTNode *lchild,*rchild; //左右孩子的指针
}BiTNode,*BiTree;
//初始化树的函数
voidcreatebitree(bitree*t ) {
*t=(bitnode* ) malloc ) sizeof (bitnode );
(t ) -数据=1;
(t )-lchild=(bitnode* ) malloc (sizeof ) bitnode );
(t )-rchild=(bitnode* ) malloc (sizeof ) bitnode );
(t ) -液晶数据=2;
(t )-lchild-lchild=(bitnode* ) malloc ) sizeof ) bitnode );
(t )-lchild-rchild=(bitnode* ) malloc ) sizeof ) bitnode );
(t )-lchild-rchild-data=5;
(t )-LChild-LChild=null;
(t )-LChild-LChild=null;
(t )-Fild-data=3;
(t )-rchild-lchild=(bitnode* ) malloc ) sizeof ) bitnode );
(t )-rchild-lchild-data=6;
(t )-rchild-lchild-lchild=NULL;
(t )-rchild-lchild-rchild=NULL;
(t )-rchild-rchild=(bitnode* ) malloc ) sizeof ) bitnode );
(t )-rchild-rchild-data=7;
(t )-rchild-rchild-lchild=NULL;
(t )-rchild-rchild-rchild=NULL;
(t )-lchild-lchild-data=4;
(t )-LChild-LChild=null;
(t )-LChild-LChild=null;
}
//模拟操作节点元素的函数,输出节点自身的数值
语音显示层(bitnode * elem ) {
printf('%d ',elem-data );
}
//先遍历
语音预览(bitreet ) {
if(t ) {
显示elem (t; //调用操作节点数据的函数方法
preorder traverse (叔液晶; //访问该节点的左边的孩子
preorder traverse (叔车轮; //访问该节点的右边的孩子
}
//如果节点为空,则返回上一层
返回;
}
//中序遍历
语音识别器(bitreet ) {
if(t ) {
节点跟踪(t-lchild; //遍历左孩子
显示elem (t; //调用操作节点数据的函数方法
节点跟踪(t-rchild; //遍历右边的孩子
}
//如果节点为空,则返回上一层
返回;
}
//之后遍历
语音端口转换器(bitreet ) {
if(t ) {
postorder traverse (叔液晶; //遍历左孩子
后期跟踪(t-rchild; //遍历右边的孩子
显示elem (t; //调用操作节点数据的函数方法
}
//如果节点为空,则返回上一层
返回;
}
int main () )。
Bi树树;
创建树;
printf(3360(n ) );
前序遍历(tree;
printf (中序扫描算法:(n );
节点跟踪(tree;
printf () (n后为:(n ) );
后推式平台(tree;
}
执行结果:
按顺序遍历:
1 2 4 5 3 6 7
中序扫描算法:
4 2 5 1 6 3 7
从后遍历:
4 5 2 6 7 3 1
总结
二叉树由根节点和左右部分树构成,所以很容易使用递归的思想。 在递归算法的低层实现中,实际上通过使用非递归算法的具体实现,可以看到下一节的内容。