void flattenInternal(TreeNode* root, vector<TreeNode*> &v) { if (root == null) return; v.push_back(root); if (root->left) { flatten2(root->left, v); } if (root->right) { flatten2(root->right, v); } }
TreeNode *flatten2(TreeNode *root) { if(!root || (root->left == NULL && root->right == NULL)) return root; if(root->left == NULL) return flatten2(root->right); if(root->right == NULL) { root->right = root->left; root->left = NULL; return flatten2(root->right); } TreeNode *stleft = flatten2(root->left); TreeNode *stright = flatten2(root->right); stleft->right = root->right; root->right = root->left; root->left = NULL; return stright; }
void flatten(TreeNode *root) { flatten2(root); }