原题网址:https://leetcode.com/problems/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
方法:递归。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
// 这个参数表示未来,未来的root,未来的left,未来的right,未来的flip函数啊,请帮我反转吧!!!
private TreeNode flip(TreeNode fRoot, TreeNode fLeft, TreeNode fRight) {
// 我现在就帮你反转,但请容我先记住必要的左子树
TreeNode fl = fRoot.left;
TreeNode fr = fRoot.right;
fRoot.left = fLeft;
fRoot.right = fRight;
if (fl == null) return fRoot;
return flip(fl, fr, fRoot);
}
public TreeNode upsideDownBinaryTree(TreeNode root) {
if (root == null || root.left == null) return root;
TreeNode fl = root.left;
TreeNode fr = root.right;
root.left = null;
root.right = null;
return flip(fl, fr, root);
}
}