面试题36:二叉搜索树与双向链表
题目描述:
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
代码:
class Solution {
public:
TreeNode* Convert(TreeNode* pRootOfTree)
{
TreeNode* LastNodeInList=nullptr;
ConvertCore(pRootOfTree,LastNodeInList);
TreeNode* HeadofList=LastNodeInList;
while(HeadofList!=nullptr&&HeadofList->left!=nullptr){
HeadofList=HeadofList->left;
}
return HeadofList;
}
void ConvertCore(TreeNode* pNode,TreeNode* &LastNode){
if(pNode==nullptr){
return;
}
TreeNode* pCurrent=pNode;
if(pCurrent->left){
ConvertCore(pCurrent->left,LastNode);
}
pCurrent->left=LastNode;
if(LastNode!=nullptr){
LastNode->right=pCurrent;
}
LastNode=pCurrent;
if(pCurrent->right){
ConvertCore(pCurrent->right,LastNode);
}
}
};