分治 递归问题

  1. 递归函数定义

明确函数的使命 明确原问题与子问题 要兼顾原问题与子问题

使命: 这个函数就是用来将传入的节点的两个子节点进行互换位置的
原问题: 将节点的两个子节点互换位置
子问题: 将节点的两个子节点互换位置

  1. 基础情况处理

数据规模较小时直接返回答案

当前节点不存在的时候 直接rentun

  1. 递归调用

可以称之为 超级操作 (涉及向下递归)
我们要将这个超级操作看成一个整体 , 忽略里面的细节
相信他一定能够完成使命

当前节点互换完后, 调用dfs函数, 将子节点的两个节点互相调换位置。

  1. 递推到当前层

可以称之为 微操作 (不涉及向下递归)

微操作就是将两个节点互换位置。

解法一

/*
 * @lc app=leetcode.cn id=226 lang=javascript
 *
 * [226] 翻转二叉树
 */

// @lc code=start
/**
 * 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) {
    dfs(root);
    return root;
};

/**
 * @param {*} root 
 * @returns 
 */
function dfs(root){
    if(!root){
        return;
    }
    [root.left, root.right] = [root.right, root.left];
    dfs(root.left)
    dfs(root.right);
}
// @lc code=end