题目:
翻转一棵二叉树
示例:
输入:
输出:
备注:
这个问题是受到 Max Howell 的 原问题 启发的 :
谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。
思路一:
java代码
使用递归思路
将其左右子树的next反转即可
终止条件是子树没有
这种递归是从下往上
代码为
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root==null)return null;
TreeNode left=invertTree(root.left);
TreeNode right=invertTree(root.right);
root.left=right;
root.right=left;
return root;
}
}
从上往下的递归为
class Solution {
public TreeNode invertTree(TreeNode root) {
//递归函数的终止条件,节点为空时返回
if(root==null) {
return null;
}
//下面三句是将当前节点的左右子树交换
TreeNode tmp = root.right;
root.right = root.left;
root.left = tmp;
//递归交换当前节点的 左子树
invertTree(root.left);
//递归交换当前节点的 右子树
invertTree(root.right);
//函数返回时就表示当前这个节点,以及它的左右子树
return root;
}
}
此处讲解一下js代码的思路
js代码可以有特殊的结构(结构赋值)
var invertTree = function(root) {
if(root !== null){
[root.left, root.right] = [invertTree(root.right), invertTree(root.left)]
}
return root
};