每日一题:翻转二叉树&二叉树最大深度

121 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

leetcode226翻转二叉树

一、题目描述:

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

示例1:

image-20220317124024762.png

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

示例2:

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

示例3:

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

二、思路分析:

可以使用递归处理,每个节点的左子树和右子树需要交换位置,那么定义一个只交换当前节点子树的方法。递归的去交换其子树节点。

三、代码:

/**
 * 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;
    }
    // 每项递归的逻辑:交换子树位置,子树再去交换自己的子树
    [root.left, root.right] = [invertTree(root.right), invertTree(root.left)]
    return root
};

leetcode104二叉树最大深度

一、题目描述

给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

示例:

给定二叉树 [3,9,20,null,null,15,7]。最大深度为3
    3
   / \
  9  20
    /  \
   15   7

二、递归方法:

/**
 * 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 {number}
 */
var maxDepth = function(root) {
    // 递归/递推
    if (root==null) {
        return 0
    }
    return Math.max(maxDepth(root.left), maxDepth(root.right))+1
};

三、思考:迭代法