求star

开源不易,喜欢请点个star吧

Ocean Han
413 字
2 分钟
Leetcode->反转二叉树
2022-06-25

题目#

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

示例 1:

img

输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]

示例 2:

img

输入:root = [2,1,3]
输出:[2,3,1]

示例 3:

输入:root = []
输出:[]

提示:

  • 树中节点数目范围在 [0, 100]
  • -100 <= Node.val <= 100

解题:key:#

① 递归#

TIP

递归三要点:

  • 确定递归函数的参数和返回值
  • 确定终止条件
  • 确定单层递归的逻辑
/**
 * 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){
        return root
    }
    // 交换
    [root.left,root.right] = [root.right,root.left]
    invertTree(root.left)
    invertTree(root.right)
    return root
};

②BFS(广搜)#

TIP

​ 模拟一个队列,根节点先入队,然后出队,出队就交换它的左右子树

​ 然后将它的左右子树也都入队,再出队…直到队列为空,就翻转了所有子树

/**
 * 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)   return null
    const queue = [root]

    while(queue.length){
        let cur = queue.shift();
        [cur.left,cur.right] = [cur.right,cur.left]
        if(cur.left){
            queue.push(cur.left)
        }
        if(cur.right){
            queue.push(cur.right)
        }
    }
    return root
};

③DFS(深搜)#

/**
 * 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)   return null
    const stack = [root]

    while(stack.length){
        let cur = stack.pop();
        [cur.left,cur.right] = [cur.right,cur.left]
        if(cur.left){
            stack.push(cur.left)
        }
        if(cur.right){
            stack.push(cur.right)
        }
    }
    
    return root
};
Leetcode->反转二叉树
https://blog.oceanh.top/posts/algorithm/翻转二叉树/
作者
Ocean Han
发布于
2022-06-25
许可协议
CC BY-NC-SA 4.0
最后修改时间
2024-08-10 10:08:49