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
solution:
use stack to store left node from top to bottom, then reverse to construct the tree.
if(root ==null || (root.left == null && root.right == null)) return root;
Stack<TreeNode> path = new Stack<>();
while(root.left!=null) {
path.add(root);
root = root.left;
}
path.add(root);
while(!path.isEmpty()) {
TreeNode temp = path.pop();
if(!path.isEmpty()) {
temp.right = path.peek();
temp.left = path.peek().right;
}else{
temp.right = null;
temp.left = null;
}
}
return root;