kniost

谁怕,一蓑烟雨任平生

0%

LeetCode 156. Binary Tree Upside Down

156. Binary Tree Upside Down

Difficulty: Medium

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.

Example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Input: [1,2,3,4,5]

1
/ \
2 3
/ \
4 5

Output: return the root of the binary tree [4,5,2,#,#,3,1]

4
/ \
5 2
/ \
3 1

Clarification:

Confused what [4,5,2,#,#,3,1] means? Read more below on how binary tree is serialized on OJ.

The serialization of a binary tree follows a level order traversal, where ‘#’ signifies a path terminator where no node exists below.

Here’s an example:

1
2
3
4
5
6
7
  1
/ \
2 3
/
4
\
5

The above binary tree is serialized as [1,2,3,#,#,4,#,#,5].

Solution

Language: Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
* Definition for a binary tree node.
* public class TreeNode {
*     int val;
*     TreeNode left;
*     TreeNode right;
*     TreeNode(int x) { val = x; }
* }
*/
class Solution {
   public TreeNode upsideDownBinaryTree(TreeNode root) {
       if (root == null) {
           return root;
      }
       if (root.left != null) {
           return helper(root.left, root);
      }
       return root;
  }
   
   private TreeNode helper(TreeNode left, TreeNode root) {
       TreeNode leftRoot;
       if (left.left != null) {
           leftRoot = helper(left.left, left);
      } else {
           leftRoot = left;
      }
       left.right = root;
       left.left = root.right;
       root.left = null;
       root.right = null;
       return leftRoot;
  }
}