题目描述:
设计一个算法,将二叉树的叶子结点按从左到右的顺序连成一个单链表,表头指针为head,二叉树按二叉链表来存储,链接时用叶结点的右指针域来存放单链表指针。
算法思想:
通常的我们所用的先序、中序和后序都是按从左到右的顺序来访问叶结点的,这里我们选择中序遍历。设置一个前驱的指针pre,初始情况下为空,第一个叶结点由指针head指向,遍历到叶结点的时候,就将它前驱的rchild指针指向它,最后一个rchild指针为空。
代码如下:
LinkedList head,pre=NULL; //全局变量
LinkedList InOrder(BiTree bt){
if(bt){
InOrder(bt->lchild); //中序遍历左子树
if(bt->lchild==NULL && bt->rchild==NULL) //叶结点
if(pre==NULL){
head=bt;
pre=bt;
} //处理第一个叶结点
else{
pre->rchild=bt;
pre=bt;
} //将叶结点放到链表中
InOrder(by->rchild); //中序遍历右子树
pre->rchild=NULL; //设置链表尾
}
return head;
}