/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
    TreeNode* Convert(TreeNode* pRootOfTree) {

		TreeNode* cur=pRootOfTree;
		if(cur==nullptr)
		return nullptr;
		stack<TreeNode*> st;
		vector<TreeNode*> num;
		TreeNode* pre=nullptr;
		TreeNode* head;
		while(!st.empty() || cur)
		{
			while(cur)
			{
				st.push(cur);
				cur=cur->left;
			}
			//左树访问完了.
			auto node=st.top();
			if(pre==nullptr)
			{
				head=node;
				pre=node;
			}else
			{
				pre->right=node;
				node->left=pre;
				pre=node;
			}
			st.pop();
			//num.push_back(node);
			cur=node->right;
		}
		return head;


		//保存顺序在链接。也可以直接使用一个pre和head来搞.
        // int n=num.size();
		// for(int i=0;i<n-1;i++)
		// {
		// 	num[i]->right=num[i+1];
		// 	num[i+1]->left=num[i];
		// }
		//return num[0];
    }
};