Skip to content

Latest commit

 

History

History
56 lines (47 loc) · 976 Bytes

File metadata and controls

56 lines (47 loc) · 976 Bytes
/*
// 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)