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
递归。主要操作指针。
1.左边也做一次。
2.现在的三个结点指针变一变。记得要把root的指针清null,不然会出现双向指针。
3.把左边指针传上来的root当root传回去,这样才能把最底下弄到的新root给传到最上面来。
实现:
/** * 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 || root.left == null && root.right == null) { return root; } TreeNode newRoot = upsideDownBinaryTree(root.left); root.left.left = root.right; root.left.right = root; root.left = root.right = null; return newRoot; } }