持续创作,加速成长!这是我参与「掘金日新计划 · 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:
输入: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 = []
输出:[]
提示:
树中节点数目范围在 [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;
};