inorder dfs O(n) time O(h) space
维护一个prev用root更新prev,因为prev一直被更新,所以到最后prev就是tail,最后连接head和prev(即tail)即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
class Solution { public: Node* treeToDoublyList(Node* root) { if (!root) return root; dfs(root); auto head = dummy_head.right; head->left = prev; prev->right = head; return head; }
void dfs(Node *root) { if (!root) return; dfs(root->left); prev->right = root; root->left = prev; prev = root; dfs(root->right); }
Node dummy_head, *prev = &dummy_head; };
|