程序员——算法讨论(一)

来源:互联网 发布:王小帮淘宝创业故事 编辑:程序博客网 时间:2024/06/03 21:52

题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。
比如将二元查找树 10

                          / /

                         6 14

                        / / / /

                       4 8 12 16

转换成双向链表
4=6=8=10=12=14=16

 

分析:利用中序遍历

 

template<class T>
void ConvertNode(node<T>* pNode, node<T>* & pLastNodeInList)
{
   if (pNode->lp!=0)
      ConvertNode(pNode->lp,pLastNodeInList);
   pNode->lp=pLastNodeInList;
   if (pLastNodeInList!=NULL)
   {
    pLastNodeInList->rp=pNode;
   }
  
   pLastNodeInList=pNode;
   if(pNode->rp!=0)
    ConvertNode(pNode->rp,pLastNodeInList);
}

template<class T>
node<T>* Convert_Solution1(node<T>* pHeadOfTree)
{
 node<T> * plast=NULL, *ret_p=pHeadOfTree;
    ConvertNode(pHeadOfTree,plast);
 while(ret_p->lp!=0)
        ret_p=ret_p->lp;
 return ret_p;
}