方法1: bottomUp-dfs-postorder-recursion。时间复杂n,空间复杂h。这道题唯一需要知道的点是:先处理左右子树,然后经过处理的左子树的rightmost node左边连经过处理的右子树,右边连一个值为root.val的节点。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode upsideDownBinaryTree(TreeNode root) {
if(root == null) return root;
if(root.left == null && root.right == null) return root;
TreeNode left = upsideDownBinaryTree(root.left);
TreeNode right = upsideDownBinaryTree(root.right);
TreeNode copy = left;
while(copy.right != null){
copy = copy.right;
}
copy.left = right;
copy.right = new TreeNode(root.val);
return left;
}
}
总结:
- 无