/* 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)以处理指针链接问题。