思路:
用postorder递归. 用一个prev指针一直指向postorder的前一个节点. 主思路是先把右边的树展开, 再把左边的树展开, 再把两个子树拼到右边即可.
void helper(TreeNode* root, TreeNode*& prev) {
if (! root) return;
helper(root->left, prev);
helper(root->right, prev);
root->right = prev;
root->left = NULL;
prev = root;
}
void flatten(TreeNode* root) {
TreeNode* prev = NULL;
helper(root, prev);
}