156. Binary Tree Upside Down
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
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public TreeNode upsideDownBinaryTree(TreeNode root) { if (root == null) { return null; } TreeNode result = helper(root); return result; } private TreeNode helper(TreeNode r) { TreeNode left = r.left; TreeNode right = r.right; if (left == null && right == null) { return r; } TreeNode result = helper(left); left.right = r; left.left = right; //modify root to leaf node r.left = null; r.right = null; return result; } }
防止成环的代码是这段:
//modify root to leaf node r.left = null; r.right = null;
让根节点变成叶子节点。
currentNode的那道 sort list也要注意。不然merge的时候, 前半串会找不到终点的