226 翻转二叉树
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
题解
首先镜像一棵树看起来是挺复杂的。但是我们要分解一下对于一棵小树来说怎么翻转。对于只有三个节点的树来说,翻转一下只需要交换左右节点。升级一下,对于7个节点的满二叉树来说,翻转过程其实可以重复的,先交换第二层的左右节点,然后分别再交换第二层的左子树和右子树。所以这个过程其实类似于先序遍历。
先序遍历的递归结构是
javascript
var preOrderRecursive = function(root) {
const preOrderInner = (root, result) => {
if (!root) {
return
}
result.push(root.val)
preOrderInner(root.left, result)
preOrderInner(root.right, result)
}
const result = []
preOrderInner(root, result)
return result
}
我们这里不需要保存处理的结果,只需要交换就可以,所以我们的参数只有root
javascript
var invertTree = function(root) {
var invertTreeRecur = function(root) {
if(!root) {
return root
}
//swap
const temp = root.left;
root.left = root.right;
root.right = temp;
//先序遍历
invertTreeRecur(root.left)
invertTreeRecur(root.right)
return root
}
return invertTreeRecur(root)
}