题目
编写一算法
- 利用叶结点中的空指针域将所有叶结点链接为一个带有头节点的双链表
- 算法返回头节点的地址
代码
/**
* 编写一算法,利用叶结点中的空指针域将所有叶结点链接为一个带有头节点的双链表
* 算法返回头节点的地址
**/
#include <iostream>
using namespace std;
typedef char ElemType;
typedef struct TNode{
ElemType data;
struct TNode *lchild,*rchild;
}TNode,*BiTree;
void createBiTree(BiTree &T){
ElemType e;
cin>>e;
if(e=='#'){
T=NULL;
return;
}
T=(TNode *)malloc(sizeof(TNode));
T->data=e;
createBiTree(T->lchild);
createBiTree(T->rchild);
}
void dispBiTree(BiTree T){
if(T==NULL)
return;
cout<<T->data<<' ';
dispBiTree(T->lchild);
dispBiTree(T->rchild);
}
//算法主体
BiTree head=NULL,pre;
void createLeafList(BiTree &T){
if(T){
createLeafList(T->lchild);
if(T->lchild==NULL&&T->rchild==NULL){
if(head==NULL){
head = (TNode *)malloc(sizeof(TNode));
head->lchild=NULL;
head->rchild=T;
T->lchild=head;
pre=T;
}else{
T->lchild=pre;
pre->rchild=T;
pre=T;
}
}
createLeafList(T->rchild);
pre->lchild=NULL;
}
}
int main() {
BiTree T;
createBiTree(T);
dispBiTree(T);
createLeafList(T);
cout<<endl;
for(TNode *p=head->rchild;p!=NULL;p=p->rchild){
cout<<p->data<<" ";
}
return 0;
}