Invert a binary tree.
4
/ \
2 7
/ \ / \
1 3 6 9
to
4
/ \
7 2
/ \ / \
9 6 3 1
题意:
翻转二叉树,属于二叉树基本操作。
不过关于这道题是关于Max Howell大神的一次求职,其来自于Twitter的转播“Google HR:我们90%的工程师都用你写的软件(Homebrew),但是你竟然不会在白板上面反转一颗二叉树,所以滚吧”,这一方面说明实际工作中用到的高级算法很少,另一方面,强调了手写代码的重要性。不过大神是不愁找工作的,作为小白的我为了以后少愁点,现在就要努力了!~
分析:
采用递归的方法,递归的终止条件:二叉树为空或遍历到二叉树的叶子节点,此时返回当前的二叉树即可。其他节点,需要将左子树翻转后赋给右子树,右子树翻转后赋给左子树。代码比较简单,如下:
/**
* 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||(root.left==null&&root.right==null))
return root;
//如果二叉树不为空
//先将左子树暂存在temp中
TreeNode temp=root.left;
root.left=invertTree(root.right);
root.right=invertTree(temp);
return root;
}
}