三刷156. Binary Tree Upside Down

注意这个题先判断root 和root.left是不是空,为什么要特意判断root.left是不是空呢?因为根据题意,root.left是空的时候,我们找不到新的newRoot,完成不了翻转,所以直接返回原root.

而且要注意我们用TreeNode newRoot = upsideDownBinaryTree(root.left);这句代码实际上就是已经翻转好了root.left那一块儿,也就是

   4
 /   \ 
5     2

这一块儿已经翻转好了,我们只需要把 root那一块儿1-2-3翻转好接上去就行了。
所以我们处理1-2-3那一块儿的时候,不仅要连上新的edge, 还必须删除旧的不再需要的edge(比如1的左右子树2,3那两条edge就得删除)

/**
 * 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){
            return root;
        }
        TreeNode newRoot = upsideDownBinaryTree(root.left);
        root.left.left = root.right;
        root.left.right = root;
        root.left = null;
        root.right = null;
        return newRoot;
    }
}

你可能感兴趣的:(三刷156. Binary Tree Upside Down)