题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
解题思路
convertHelper 函数考虑了树的 5 种形态:
代码实现
class Solution {
private:
void convertHelper(TreeNode
* currNode
, TreeNode
*& lastNodeOfLeftSubtreeLink
){
if(currNode
== NULL)
return;
convertHelper(currNode
->left
, lastNodeOfLeftSubtreeLink
);
currNode
->left
= lastNodeOfLeftSubtreeLink
;
if(lastNodeOfLeftSubtreeLink
)
lastNodeOfLeftSubtreeLink
->right
= currNode
;
lastNodeOfLeftSubtreeLink
= currNode
;
convertHelper(currNode
->right
, lastNodeOfLeftSubtreeLink
);
}
public:
TreeNode
* Convert(TreeNode
* pRootOfTree
)
{
if(pRootOfTree
== NULL)
return NULL;
TreeNode
* lastNodeOfLeftSubtreeLink
= NULL;
convertHelper(pRootOfTree
, lastNodeOfLeftSubtreeLink
);
TreeNode
* pHead
= pRootOfTree
;
while(pHead
->left
)
pHead
= pHead
->left
;
return pHead
;
}
};
运行结果
运行时间:4ms 占用内存:476k