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:{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;