leetcode-二叉树-二叉树的最大深度和翻转二叉树

126 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第18天,点击查看活动详情

今天讲解的是二叉树系列的二道题

1.二叉树的最大深度

2.翻转二叉树

104. 二叉树的最大深度

leetcode地址:leetcode.cn/problems/ma…

难度

简单

描述

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

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

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

示例: 给定二叉树 [3,9,20,null,null,15,7],

   3
   / \
  9  20
    /  \
   15   7

返回它的最大深度 3 。

解法

1.解决二叉树的题一般都是使用递归来解决

2.使用递归一般是递归的终止条件和递归方法

3.这道题的递归终止条件就是当root不存在的时候

4.所以先判断当root不存在的时候,返回0

5.递归左子树,结果赋值给变量leftRoot

6.递归右子树,结果赋值给变量rightRoot

7.最后取左子树和右子树中间最大的值,并加上1,1是根节点

代码

/**
 * 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;   // 递归终止
    let leftRoot = maxDepth(root.left)    
    let rightRoot = maxDepth(root.right)
    return Math.max(leftRoot,rightRoot) + 1
};

226. 翻转二叉树

leetcode地址:leetcode.cn/problems/in…

难度

简单

描述

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

示例 1:

image.png

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

示例 2:

image.png


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

示例 3:


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

 

提示:

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

解法

1.采用递归的方法

2.先找到递归终止的条件,条件是当root为null的时候,表示遍历到了最后

3.先递归左子树,将左子树下面的节点翻转

4.再递归右子树,将右子树下面的节点翻转

5.最后将左子树和右子树翻转

6.最后返回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;

    invertTree(root.left)
    invertTree(root.right)

    let temp = root.left;
    root.left = root.right;
    root.right = temp;
    return root;
};