Given a binary tree where all the right nodes are either leaf nodes with a sibling (a left node that shares the same parent node) or empty, flip it upside down and turn it into a tree where the original right nodes turned into left leaf nodes. Return the new root.
For example:
Given a binary tree {1,2,3,4,5},
1
/ \
2 3
/ \
4 5
return the root of the binary tree [4,5,2,#,#,3,1].
4
/ \
5 2
/ \
3 1
TreeNode *upsideDownBinaryTree(TreeNode *root) { if(root == NULL) return root; stack<TreeNode*> s; //left child list s.push(root); TreeNode* cur = root; while(cur->left) { s.push(cur->left); cur = cur->left; } TreeNode* newroot = s.top(); cur = newroot; s.pop(); while(!s.empty()) { TreeNode* oldfather = s.top(); s.pop(); cur->left = oldfather->right; cur->right = oldfather; oldfather->left=NULL; oldfather->right=NULL; cur = curr->left; } return newroot; }