/*
// Definition for a Node.
class Node {
public:
int val;
Node* left;
Node* right;
Node() {}
Node(int _val) {
val = _val;
left = NULL;
right = NULL;
}
Node(int _val, Node* _left, Node* _right) {
val = _val;
left = _left;
right = _right;
}
};
*/
class Solution {
public:
Node* treeToDoublyList(Node* root) {
if(!root) return nullptr;
Node* prev = nullptr;
Node* head = nullptr;
function<void(Node*)> dfs = [&](Node* node) {
if(!node) return;
dfs(node->left);
if(!head) head = node;
if(prev) {
prev->right = node;
node->left = prev;
}
prev = node;
dfs(node->right);
};
dfs(root);
prev->right = head;
head->left = prev;
return head;
}
};Space Complexity: O(n) Time Complexity: O(h)