/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
	TreeNode* pre;
    TreeNode* Convert(TreeNode* pRootOfTree) {
		if (!pRootOfTree) {
			return nullptr;
		}
		TreeNode* p = pRootOfTree;
		while (p->left) {
			p = p->left;
		}
		f(pRootOfTree);
		return p;
    }

	void f(TreeNode *root){
		if(!root) return;
		f(root->left);

		root->left = pre;
		if(pre) pre->right = root;
		pre = root;

		f(root->right);
	}
};

在中序遍历的过程中(二叉搜索树中序遍历即为有序序列),用pre记录遍历的前一个结点,root表示当前结点,当遍历到当前结点时,添加程序(29-31)以处理指针链接问题。