/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
	TreeNode* head = nullptr;
	TreeNode* tail = nullptr;
    TreeNode* Convert(TreeNode* cur) {
        if (cur == nullptr) return nullptr;

		// 中序遍历: 左 中 右		
		Convert(cur->left);
		// 第1次开始转换,确定链表头节点
		if (tail == nullptr) {
			head = cur;
			tail = cur;
		} else {
			tail->right = cur; // 尾节点右指针指向当前节点cur
			cur->left = tail;  // 当前节点cur的左指针指向尾部节点
			tail = cur;  	   // 尾部节点更新到当前节点
		}
		Convert(cur->right);
		return head;		
    }
};