https://leetcode.com/problems/invert-binary-tree/
Invert a binary tree.
4 / \ 2 7 / \ / \ 1 3 6 9
to
4 / \ 7 2 / \ / \ 9 6 3 1
Trivia:
This problem was inspired by this original tweet by Max Howell:
Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.
解题思路:
这道题来源于上面写的一条tweet,其实是很简单的题目。Symmetric Tree 这道题里有很类似的思路,下面写一个递归的方法。这道题的返回值是TreeNode,当然也可以用void的返回值。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public TreeNode invertTree(TreeNode root) { if(root == null) { return root; } TreeNode temp = root.left; root.left = invertTree(root.right); root.right = invertTree(temp); return root; } }
若不用递归,就更简单了,虽然代码复杂点。但是会BFS的应该都会,一模一样的便利,只不过多了一个将每个节点左右子节点交换的操作。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public TreeNode invertTree(TreeNode root) { if(root == null) { return root; } Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.offer(root); while(queue.size() > 0) { TreeNode cur = queue.poll(); TreeNode temp = cur.left; cur.left = cur.right; cur.right = temp; if(cur.left != null) { queue.offer(cur.left); } if(cur.right != null) { queue.offer(cur.right); } } return root; } }