class Solution {
public:
Node *pre,*head; // pre最终会指向中序遍历的最后一个节点,而head指向第一个节点
Node* treeToDoublyList(Node* root) {
if(root==nullptr) return nullptr;
dfs(root);
// 头尾相连
head->left=pre;
pre->right=head;
return head;
}
void dfs(Node *cur){
if(cur==nullptr) return ;
dfs(cur->left);
if(pre==nullptr){
head=cur;
}
else{
pre->right=cur;
cur->left=pre;
}
pre=cur;
dfs(cur->right);
}
};