https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5?tpId=13&tqId=11179&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
想明白过程就很简单,记录上一次访问的点。
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: void dfs(TreeNode* root, TreeNode* &last, TreeNode* &head) { if (!root) return; if (root->left) { dfs(root->left, last, head); } if (head == NULL) { head = root; } else { last->right = root; root->left = last; } last = root; if (root->right) { dfs(root->right, last, head); } } TreeNode* Convert(TreeNode* pRootOfTree) { if (pRootOfTree == NULL) return NULL; TreeNode* last = NULL, *head = NULL; dfs(pRootOfTree, last, head); return head; } };