https://leetcode-cn.com/problems/convert-binary-search-tree-to-sorted-doubly-linked-list/solution/jiang-er-cha-sou-suo-shu-zhuan-hua-wei-pai-xu-de-s/
/*
// 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:
pair<Node*, Node*> divide(Node* root) {
Node *begin, *end;
begin = root, end = root;
if (root->left != NULL) {
auto p = divide(root->left);
p.second->right = root;
root->left = p.second;
begin = p.first;
}
if (root->right != NULL) {
auto p = divide(root->right);
root->right = p.first;
p.first->left = root;
end = p.second;
}
return {begin, end};
}
Node* treeToDoublyList(Node* root) {
if (root == NULL) {
return NULL;
}
auto p = divide(root);
p.first->left = p.second;
p.second->right = p.first;
return p.first;
}
};