代码:
struct BinaryTreeNode
{
int m_val;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
};
//递归方法
BinaryTreeNode* BSTConvertToTwoWayList(BinaryTreeNode* pRoot)
{
BinaryTreeNode* pLastNodeInList = nullptr;
ConvertNode(pRoot, &pLastNodeInList);
//pLastNodeInList指向双向链表的尾结点
BinaryTreeNode*pHead = pLastNodeInList;
while (pHead != nullptr && pHead->m_pLeft != nullptr) //从尾结点走到头结点
pHead = pHead->m_pLeft;
return pHead;
}
//中序遍历
void ConvertNode(BinaryTreeNode* pNode, BinaryTreeNode** pLastNodeInList)
{
if (pNode == nullptr)
return;
BinaryTreeNode* pCurrent = pNode;
if (pCurrent->m_pLeft != nullptr)
ConvertNode(pCurrent->m_pLeft, pLastNodeInList);
pCurrent->m_pLeft = *pLastNodeInList;
if (*pLastNodeInList != nullptr)
(*pLastNodeInList)->m_pRight = pCurrent;
*pLastNodeInList = pCurrent;
if (pCurrent->m_pRight != nullptr)
ConvertNode(pCurrent->m_pRight, pLastNodeInList);
}