#include <iostream>
struct BinaryTreeNode
{
int m_nValue;
BinaryTreeNode* pLeft, * pRight;
BinaryTreeNode(int _value) :m_nValue(_value), pLeft(nullptr), pRight(nullptr) {}
};
void ConvertNode(BinaryTreeNode* pNode, BinaryTreeNode* pLastNodeInlist)
{
if (pNode == nullptr)return;
BinaryTreeNode* pCurrent = pNode;
if(pCurrent->pLeft!=nullptr)
ConvertNode(pCurrent->pLeft, pLastNodeInlist);
pCurrent->pLeft = pLastNodeInlist;//当前节点的左指针变前指针指向前一个节点
if (pLastNodeInlist != nullptr)
pLastNodeInlist->pRight = pCurrent;//如果前一个节点不为空,则前一个节点的右指针变后指针指向当前节点
pLastNodeInlist = pCurrent;//移动到当前节点
if (pCurrent->pRight != nullptr)
ConvertNode(pNode->pRight, pLastNodeInlist);
}
BinaryTreeNode* Convert(BinaryTreeNode* pRoot)
{
if (pRoot == nullptr)return nullptr;
BinaryTreeNode* pLastNodeInlist = nullptr;
ConvertNode(pRoot, pLastNodeInlist);//pLastNodeInlist最终为链表的最后一个节点
while (pLastNodeInlist->pLeft)
pLastNodeInlist = pLastNodeInlist->pLeft;
BinaryTreeNode* head = pLastNodeInlist;
return head;
}
面试题36:二叉搜索树与双向链表
最新推荐文章于 2022-05-13 21:54:01 发布