考研数据结构(每日一题)
题目:设计一个算法将二叉树的叶结点按从左到右的顺序连成一个单链表,表头指针为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(bt -> rchild); //中序遍历右子树
pre -> rchild = NULL; //设置链表尾
}
return head;
}