题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路:
想了好久,我觉得最关键的还是还原出中序的想法, 要时刻保留之前小的节点。拿到了小的节点,就可以为所欲为。
class Solution {
public:
TreeNode* Convert(TreeNode* pRootOfTree)
{
if (pRootOfTree == NULL)return NULL;
TreeNode *pointer = NULL;
Inorder(pRootOfTree, pointer);
while (pointer->left!=NULL)
{
pointer = pointer->left;
}
return pointer;
}
void Inorder(TreeNode* rt,TreeNode*& pre){
if(rt==nullptr)return;
if(rt->left)
Inorder(rt->left,pre);
rt->left=pre;
if(pre)
pre->right=rt;
pre=rt;
if(rt->right)
Inorder(rt->right,pre);
}
};