/* 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) { if(!pRootOfTree || (!pRootOfTree->left && !pRootOfTree->right)) { return pRootOfTree; } auto left_head = Convert(pRootOfTree->left); auto right_head = Convert(pRootOfTree->right); if(left_head) { auto left_tail = left_head; while(left_tail->right) { left_tail = left_tail->right; } left_tail->right = pRootOfTree; pRootOfTree->left = left_tail; } if(right_head) { right_head->left = pRootOfTree; pRootOfTree->right = right_head; } if(left_head) { return left_head; } else { return pRootOfTree; } } };
典型递归