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