#题目描述
#思路
排序链表即可以考虑到中序遍历(即左子树调用递归函数,处理中间节点,右子树调用递归函数)
即将当前节点保留为cur变量,把上个处理的节点作为pre变量(通过指针传递)
即在中序遍历中:
左子节点会变为pre变量,而父节点为cur变量,此时
cur -> left = pre
即可完成二叉搜索树变为双向链表的转换
#实现
class Solution {
public:
TreeNode* Convert(TreeNode* root)
{
if(!root)
return nullptr;
TreeNode *pre = nullptr;
convert(root, pre);
if(root -> left)
root = root -> left;
return root;
}
void convert(TreeNode* cur, TreeNode *&pre)
{
if(cur == nullptr)
return ;
convert(cur -> left, pre);
cur -> left = pre;
if(pre)
pre -> right = cur;
pre = cur;
convert(cur -> right, pre);
}
};