#include <iostream>
#include <stack>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
TreeNode *upsideDownBinaryTree(TreeNode *root) {
if (root == NULL)
return root;
stack<TreeNode*> leftDragon;
stack<TreeNode*> rightSingle;
leftDragon.push(root);
while (root) {
if (root->left)
leftDragon.push(root->left);
if (root->right)
rightSingle.push(root->right);
root = root->left;
}
root = leftDragon.top();
leftDragon.pop();
if (!rightSingle.empty()) {
root->left = rightSingle.top();
rightSingle.pop();
}
TreeNode *cur = root;
while (!leftDragon.empty()) {
if (!rightSingle.empty()) {
cur->left = rightSingle.top();
rightSingle.pop();
}
if (!leftDragon.empty()) {
cur->right = leftDragon.top();
leftDragon.pop();
cur = cur->right;
}
}
return root;
}
};
int main() {
Solution sol;
TreeNode *root = new TreeNode(1);
root->left = new TreeNode(2);
root = sol.upsideDownBinaryTree(root);
cout << root->val << endl;
cout << root->right->val << endl;
delete root->right;
delete root;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RhY2s+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgVHJlZU5vZGUgewogICAgICBpbnQgdmFsOwogICAgICBUcmVlTm9kZSAqbGVmdDsKICAgICAgVHJlZU5vZGUgKnJpZ2h0OwogICAgICBUcmVlTm9kZShpbnQgeCkgOiB2YWwoeCksIGxlZnQoTlVMTCksIHJpZ2h0KE5VTEwpIHt9CiAgfTsKCmNsYXNzIFNvbHV0aW9uIHsKcHVibGljOgogICAgVHJlZU5vZGUgKnVwc2lkZURvd25CaW5hcnlUcmVlKFRyZWVOb2RlICpyb290KSB7CiAgICAgICAgaWYgKHJvb3QgPT0gTlVMTCkKICAgICAgICAgICAgcmV0dXJuIHJvb3Q7CiAgICAgICAgc3RhY2s8VHJlZU5vZGUqPiBsZWZ0RHJhZ29uOwogICAgICAgIHN0YWNrPFRyZWVOb2RlKj4gcmlnaHRTaW5nbGU7CiAgICAgICAgbGVmdERyYWdvbi5wdXNoKHJvb3QpOwogICAgICAgIHdoaWxlIChyb290KSB7CiAgICAgICAgICAgIGlmIChyb290LT5sZWZ0KQogICAgICAgICAgICAgICAgbGVmdERyYWdvbi5wdXNoKHJvb3QtPmxlZnQpOwogICAgICAgICAgICBpZiAocm9vdC0+cmlnaHQpCiAgICAgICAgICAgICAgICByaWdodFNpbmdsZS5wdXNoKHJvb3QtPnJpZ2h0KTsKICAgICAgICAgICAgcm9vdCA9IHJvb3QtPmxlZnQ7CiAgICAgICAgfQogICAgICAgIHJvb3QgPSBsZWZ0RHJhZ29uLnRvcCgpOwogICAgICAgIGxlZnREcmFnb24ucG9wKCk7CiAgICAgICAgaWYgKCFyaWdodFNpbmdsZS5lbXB0eSgpKSB7CiAgICAgICAgICAgIHJvb3QtPmxlZnQgPSByaWdodFNpbmdsZS50b3AoKTsKICAgICAgICAgICAgcmlnaHRTaW5nbGUucG9wKCk7CiAgICAgICAgfQogICAgICAgIFRyZWVOb2RlICpjdXIgPSByb290OwogICAgICAgIHdoaWxlICghbGVmdERyYWdvbi5lbXB0eSgpKSB7CiAgICAgICAgICAgIGlmICghcmlnaHRTaW5nbGUuZW1wdHkoKSkgewogICAgICAgICAgICAgICAgY3VyLT5sZWZ0ID0gcmlnaHRTaW5nbGUudG9wKCk7CiAgICAgICAgICAgICAgICByaWdodFNpbmdsZS5wb3AoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIWxlZnREcmFnb24uZW1wdHkoKSkgewogICAgICAgICAgICAgICAgY3VyLT5yaWdodCA9IGxlZnREcmFnb24udG9wKCk7CiAgICAgICAgICAgICAgICBsZWZ0RHJhZ29uLnBvcCgpOwogICAgICAgICAgICAgICAgY3VyID0gY3VyLT5yaWdodDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcm9vdDsKICAgIH0KfTsKCmludCBtYWluKCkgewoJU29sdXRpb24gc29sOwoJVHJlZU5vZGUgKnJvb3QgPSBuZXcgVHJlZU5vZGUoMSk7Cglyb290LT5sZWZ0ID0gbmV3IFRyZWVOb2RlKDIpOwoJcm9vdCA9IHNvbC51cHNpZGVEb3duQmluYXJ5VHJlZShyb290KTsKCWNvdXQgPDwgcm9vdC0+dmFsIDw8IGVuZGw7Cgljb3V0IDw8IHJvb3QtPnJpZ2h0LT52YWwgPDwgZW5kbDsKCWRlbGV0ZSByb290LT5yaWdodDsKCWRlbGV0ZSByb290OwoJcmV0dXJuIDA7Cn0=