Invert a binary tree.
4 / \ 2 7 / \ / \ 1 3 6 9to
4 / \ 7 2 / \ / \ 9 6 3 1Trivia:
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.
This is a very famous conversation and the answer is actually quite simply if you recognize the essence of this problem.
Basically, we switched every left node with its right and so does its child. Another thought is you could traverse all nodes and put them in a stack. Then do the same kind of traverse again and pop node from the stack.
I wrote the first kind of method using recursive. I simply switch the left with the right and go on and on.
/**
* 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 tmp = invertTree(root.right);
root.right = invertTree(root.left);
root.left = tmp;
return root;
}
}