利用叶子节点中的空指针将所有叶子节点链接为一个带头节点的双链表
准备考研时写的算法,不铁保对!
编写一个算法,利用叶子节点中的空指针将所有叶子节点链接为一个带头节点的双链表,算法返回头节点的位置
Creat_LeafDuList(BiTree &T,DuLinkList &L)
//在非第归中序遍历的基础上建立,L指向双链表第一个节点
{
BitNode *t,*p;
InitStack(s);//初始化一个栈
p=T;t=null;
while(p||!StackEmpty(s)){
if(p)
{push(s,p);p->Lchild;}
else{
pop(s,p)
if(!p->Rchild&&!p->Lchild)//不存在左右孩子即为叶子节点
{ if(!t)//找到第一个叶子节点
{t1=p;L->next=t1;t1->Lchild=L;}
else
{t1->Rchild=p;p->Lchild=t1;t1=t1->Rchild;}
p=p->Rchild;
}//else
}//while
}// Creat_LeafDuList