【算法刷题 | 二叉树 05】3.28(左叶子之和、找树 左下角的值)

2024-03-29 07:20

本文主要是介绍【算法刷题 | 二叉树 05】3.28(左叶子之和、找树 左下角的值),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 11.左叶子之和
    • 11.1问题
    • 11.2解法一:递归
      • 11.2.1递归思路
      • 11.2.2代码实现
    • 11.3解法二:栈
      • 11.3.1栈思想
      • 11.3.2代码实现
  • 12.找树左下角的值
    • 12.1问题
    • 12.2解法一:层序遍历

11.左叶子之和

11.1问题

给定二叉树的根节点 root ,返回所有左叶子之和。

  • 示例一:

img

输入: root = [3,9,20,null,null,15,7] 
输出: 24 
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24

11.2解法一:递归

  1. 题目要求求左叶子之和,那什么是左叶子呢?
  2. 左叶子即:节点A的左孩子不为空,且左孩子的左右孩子都为空(说明是叶子节点),那么A节点的左孩子为左叶子节点
  3. 因此我们需要根据孩子的父节点来判断,该孩子是否为左叶子节点

11.2.1递归思路

  1. 递归遍历以root为根节点的树,求其左叶子之和
public int sumOfLeftLeaves(TreeNode root)
  1. 结束条件:
if(root==null){return 0;
}//也可以不用加下面这段代码
//若为叶子节点则不用递归了,因为我们根据父节点来进行递归
if(root.left==null && root.right==null){return 0
}
  1. 递归逻辑
    1. 递归求左节点的左叶子之和
      1. 若该节点的左孩子为左叶子,即找到了以该节点为根节点的左叶子之和
    2. 递归求右节点的左叶子之和
int leftValue=sumOfLeftLeaves(root.left);
if(root.left!=null && root.left.left==null && root.left.right==null){leftValue=root.left.val;
}
int rightValue=sumOfLeftLeaves(root.right);
int sum = leftValue+rightValue;
return sum;

11.2.2代码实现

class Solution {public int sumOfLeftLeaves(TreeNode root) {//递归if(root==null){return 0;}int leftValue=sumOfLeftLeaves(root.left);if(root.left!=null && root.left.left==null && root.left.right==null){leftValue=root.left.val;}int rightValue=sumOfLeftLeaves(root.right);int sum = leftValue+rightValue;return sum;}
}

11.3解法二:栈

11.3.1栈思想

  1. 使用栈模拟实现递归
  2. 思想为中左右/中右左

11.3.2代码实现

class Solution {public int sumOfLeftLeaves(TreeNode root) {//栈Stack<TreeNode> stack=new Stack<>();int sum=0;if(root==null){return sum;}stack.push(root);while(!stack.isEmpty()){TreeNode node=stack.pop();if(node.left!=null && node.left.left==null && node.left.right==null){//该node节点的左孩子为左叶子sum+=node.left.val;}if(node.left!=null){stack.push(node.left);}if(node.right!=null){stack.push(node.right);}}return sum;}}

12.找树左下角的值

12.1问题

给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。

假设二叉树中至少有一个节点。

  • 示例一:

img

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

12.2解法一:层序遍历

  1. 只需在每层遍历的时候,标记最左边的元素即可
  2. 注意,节点的左右孩子的放入队列顺序:左孩子先(先进先出)
class Solution {public int findBottomLeftValue(TreeNode root) {//层序遍历int leftValue=0;if(root==null){return 0;}Queue<TreeNode> queue=new LinkedList<>();queue.offer(root);while(!queue.isEmpty()){int size=queue.size();for(int i=0;i<size;i++){TreeNode node=queue.poll();if(i==0){//每一层的最左边leftValue=node.val;}if(node.left!=null){queue.offer(node.left);}if(node.right!=null){queue.offer(node.right);}}}return leftValue;}
}

这篇关于【算法刷题 | 二叉树 05】3.28(左叶子之和、找树 左下角的值)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/857963

相关文章

趋势预测算法大PK!

https://blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/106368395 趋势预测在很多应用场景中都会起到至关重要的作用,比如淘宝商家会考虑库存量应该保持在多少才能够满足客户需求,商场希望得知假期会迎来多大的客流量以安排系列活动,机场想要预测五一黄金周会有多大的客运量来做相应的应急部署等。在智能运维领域,趋势预测同样具有一定的理论意义和实

[机器学习系列]深入解析K-Means聚类算法:理论、实践与优化

目录 一、KMeans (一)Kmeans简介 (二)Kmeans作用和优点 (三)Kmeans局限和缺点 (四)Kmeans步骤 (五)如何选取最佳的K值的三种方法 (六)手肘法和目标函数的变化两种确定K值方法的区别 (七)如何选取第一次迭代的K个类中心------KMeans++方法  (八)KMeans的常用参数介绍 二、python实现Kmeans聚类 (一)构建数据

贪心算法、Dijkstra和A*类路径搜索算法

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言系列文章目录前言1.贪心算法、Dijkstra和A*类路径搜索算法(1)greedy best frist search贪心算法(仅仅考虑启发式代价)1.核心思想2.构造启发式猜测h(n)方法3.启发式的搜索方法优势4.栅格地图二维形式(一个直捣黄龙的搜索

【随想录】Day36—第八章 贪心算法 part05

目录 题目1: 无重叠区间1- 思路2- 题解⭐ 无重叠区间——题解思路 题目2: 763. 划分字母区间1- 思路2- 题解⭐ 划分字母区间——题解思路 题目3: 56. 合并区间1- 思路2- 题解⭐ 合并区间——题解思路 题目1: 无重叠区间 题目链接:435. 无重叠区间 1- 思路 贪心思路: 贪心思路类似于,最少的弓箭射气球的场景 通过遍历的方式

使用逆滤波算法deconvwnr恢复图像回复图像时,产生了很多横竖条纹。解决办法

使用逆滤波算法deconvwnr恢复图像时,产生了很多横竖条纹。解决办法 原来的代码 % 清除工作空间并关闭所有图形窗口clear; clc; close all;% 读取原始图像original_image = imread('pic3.jpg');% 显示原始图像subplot(131);imshow(original_image);title('Original Image')

算法学习 | day49/60 回文子串/最长回文子串

一、题目打卡         1.1 回文子串         题目链接:. - 力扣(LeetCode) class Solution {public:int countSubstrings(string s) {// vector<bool> dp;// // 这里想在初始化之外进行构造,就需要使用 assign 函数// if(s.size()&1 == 0) dp.assign(s

每日一题:左叶子之和

给定二叉树的根节点 root ,返回所有左叶子之和。 示例 1: 输入: root = [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24 示例 2: 输入: root = [1]输出: 0 提示: 节点数在 [1, 1000] 范围内-1000 <= Node.val <=

算法工程师——算法岗的分类及要求汇总

算法岗工程师 根据 Talent Seer 人才报告显示,全球 AI 从业者总人数约有 30 万,还是供不应求,其中 AI 技术专家(具有相关领域博士学位及 3 年以上工作经验的)约有 3.65 万。 简介 对于计算机专业的毕业生而言,算法岗基本上就是 「高薪」 的代名词。 在当今 IT 行业,算法工程师相比于开发工程师,技术要求会更高,当然工作难度也更大。大家可能会觉得:如果我没有名校

Hash表及hash算法的分析

Hash表中的一些原理/概念,及根据这些原理/概念: 一.       Hash表概念 二.       Hash构造函数的方法,及适用范围 三.       Hash处理冲突方法,各自特征 四.       Hash查找过程 五.       实现一个使用Hash存数据的场景-------Hash查找算法,插入算法 六.       JDK中HashMap的实现 七

笔试刷题-Day10

牛客 一、DP30买卖股票的最好时机(一) 算法:虽然题目标了DP但是用贪心更快页更容易理解 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息public class Main {public static void main(String[] args) {Scanner in = new Scanner(Sy