解题思路
考虑一种情况输入的数据只有一层节点或者空节点即 [2,3,4] 或者是 null ,怎样实现反转?
这可以说是一个n层反转树的子问题
- 判断是否是null
- inver node, 反转左右节点
var inverSingleTree = (root) {
if(root == null) return null
// 左右值
const left = {val: root.left, left: null,right: null}
const right = {val: root.right, left: null,right: null}
root.left = right
root.right = left
return root
}
考虑另一种情况输入的数据是两层节点或者空节点即 [2,3,4,5,7,8,3] 或者是 null ,那么针对这种情况的解法
- 判断是否是null
- inver node, 反转左右节点
var inverDoubleTree = (root) {
// 对于最底层节点进行反转
root.left = inverSingleTree(root.left)
root.right = inverSingleTree(root.right)
// 对于第二层节点进行反转
root.left = root.right
root.right = root.left
// 反转完成
return root
}
从以上可以看出,考虑三层节点的话
var inverTribleTree = (root) {
// 对于最底层节点进行反转
root.left = inverDoubleTree(root.left)
root.right = inverDoubleTree(root.right)
// 对于最底层节点进行反转
root.left = right
root.right = left
return root
}
对于n层树的invert的话,采用 递归 将数据向下递至最底层节点即处理 单个节点后, 再将数据反转后,再将数据向上归处理所有的上层节点,以此类推
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {TreeNode}
*/
var invertTree = function (root) {
if(root == null) return null
// 将数据 向下递 至最底层节点
const left = invertTree(root.left)
const right = invertTree(root.right)
// 反转操作
root.right = left
root.left = right
// 将反转后的数据 向上归 后处理所有的上层节点
return root
}