要求只改变指针,不创建新的结点。在中序遍历中按输出的结点序逐个更改其指针指向,
使其转变为双向链表。
Head=NULL;//指向双向链表头结点
BSTreeNode*pIndex=NULL;//指向双向链表最后一个结点
voidinOrderBSTree(BSTreeNode* pBSTree)
{
if(NULL==pBSTree)
return;
inOrderBSTree(pBSTree‐>m_pLeft);
convertToDoubleList(pBSTree);
inOrderBSTree(pBSTree‐>m_pRight);
}
voidconvertToDoubleList(BSTreeNode* pCurrent)
{
pCurrent‐>m_pLeft=pIndex;//使当前结点的左指针指向双向链表中最后一个结点
if(NULL==pIndex)//若最后一个元素不存在,此时双向链表尚未建立,因此将当前结点设为双向链表头结点
pHead=pCurrent;
else//使双向链表中最后一个结点的右指针指向当前结点
pIndex‐>m_pRight=pCurrent;
pIndex=pCurrent;//将当前结点设为双向链表中最后一个结点
}