題目描述
輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。
tips: 使用遞歸,使用一個指針的引用,來記錄轉換爲鏈表後的最後一個元素
class Solution {
public:
TreeNode* Convert(TreeNode* pRootOfTree)
{
if(pRootOfTree==NULL) {
return NULL;
}
TreeNode* pLast=NULL;
cursiveConvert(pRootOfTree,pLast);
while(pLast->left) {
pLast=pLast->left;
}
return pLast;
}
void cursiveConvert(TreeNode* pRoot,TreeNode*& pLast) {
if(pRoot==NULL) {
return;
}
cursiveConvert(pRoot->left,pLast);
if(pLast!=NULL) {
pRoot->left=pLast;
pLast->right=pRoot;
}
pLast=pRoot;
cursiveConvert(pRoot->right,pLast);
}
};