1 题目:

Invert a binary tree.

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

to

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

2 思路:

这是因为谷歌面试xx而著名的题,拿来做做。想了一会,想出来了,虽然代码量很多。。主要考察递归。

 

3 代码:

    public TreeNode invertTree(TreeNode root) {
        if(root == null) return null;
        
        if(root.left != null && root.right != null){
            TreeNode temp = root.left;
            temp.left = root.left.left;
            temp.right = root.left.right;
            
            root.left = root.right;
            root.right = temp;
        }
        if(root.left != null && root.right == null){
            root.right = root.left;
            root.left = null;
        }else if(root.left == null && root.right != null){
            root.left = root.right;
            root.right = null;
        }
        invertTree(root.left);
        invertTree(root.right);

        return root;
    }

最近一直在搞iOS,原先没考虑编程没怎么考虑浅拷贝、深拷贝的问题。java上 

 TreeNode temp = root.left;

貌似就是深拷贝了。

唐巧的代码则精简很多:

public class Solution {
    public TreeNode invertTree(TreeNode root) {
        if (root == null) {
            return null;
        }
        root.left = invertTree(root.left);
        root.right = invertTree(root.right);

        TreeNode tmp = root.left;
        root.left = root.right;
        root.right = tmp;
        return root;
    }
}

 

anyway,之前也没怎么做过二叉树的题,能做出来就不错了。