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,之前也没怎么做过二叉树的题,能做出来就不错了。