【LeetCode二叉树#08】寻找树左下角的值(回溯机制X深度)
找树左下角的值
给定一个二叉树,在树的最后一行找到最左边的值。
示例 1:

示例 2:

思路
层序遍历
这个是很自然的思路,因为层序遍历可以避免对于“最底层”这个要求的繁琐判定
在层序遍历的过程中,我们只需要保存最后一层的结果即可
代码
和标准的层序遍历写法一样
class Solution {
public:
//层序遍历
int findBottomLeftValue(TreeNode* root) {
//定义队列
queue<TreeNode*> que;
if(root != NULL) que.push(root);//判定根节点
int res;
while(!que.empty()){//遍历队列
int size = que.size();//记录队列长度
for(int i = 0; i < size; ++i){
TreeNode* node = que.front();
que.pop();
//判断,如果到了最后一层,那么就保存该节点的值
if(i == 0) res = node->val;
if(node->left) que.push(node->left);
if(node->right) que.push(node->right);
}
}
return res;
}
};
递归法
这里使用递归法的话没有层序遍历那么直观,但是因为其涉及到了递归法求深度的概念以及对于回溯的应用,所以还是记录一下
三部曲
1、确定递归函数的参数和返回值
传入参数是根节点,另需要一个变量记录深度的更新值
void traversal(TreeNode* node, int deep){
}
2、确定终止条件
因为我们是靠递归遍历来不断获取深度的
因此当遇到叶子节点时就要更新当前的深度信息
int maxDeep = INT_MIN;
int res;
void traversal(TreeNode* node, int deep){
if(node->left == NULL && node->right == NULL){
if(deep > maxDeep){
maxDeep = deep;//更新深度
//记录当前叶子节点值
res = node->val;
}
return;
}
}
3、确定单层逻辑
使用前序遍历即可,这里依旧要使用回溯
int maxDeep = INT_MIN;
int res;
void traversal(TreeNode* node, int deep){
if(node->left == NULL && node->right == NULL){
if(deep > maxDeep){
maxDeep = deep;//更新深度
//记录当前叶子节点值
res = node->val;
}
return;
}
if(node->left){
//记录深度
deep++;
traversal(node, deep);
//回溯,深度减1
deep--;
}
if(node->right){
//记录深度
deep++;
traversal(node, deep);
//回溯,深度减1
deep--;
}
return;
}
这里使用回溯的主要目的是为了让每个分支都能被遍历到,进而确认每个叶子节点,获取最底层的那个
代码
class Solution {
public:
//递归
//确定递归函数的参数和返回值
int maxDeep = INT_MIN;
int res;
void traversal(TreeNode* node, int deep){
if(node->left == NULL && node->right == NULL){
if(deep > maxDeep){
maxDeep = deep;//更新深度
//记录当前叶子节点值
res = node->val;
}
return;
}
if(node->left){
//记录深度
deep++;
traversal(node->left, deep);
//回溯,深度减1
deep--;
}
if(node->right){
//记录深度
deep++;
traversal(node->right, deep);
//回溯,深度减1
deep--;
}
return;
}
int findBottomLeftValue(TreeNode* root) {
int deep = 0;
traversal(root, deep);
return res;
}
};
【LeetCode二叉树#08】寻找树左下角的值(回溯机制X深度)的更多相关文章
- 代码随想录算法训练营day18 | leetcode 513.找树左下角的值 ● 112. 路径总和 113.路径总和ii ● 106.从中序与后序遍历序列构造二叉树
LeetCode 513.找树左下角的值 分析1.0 二叉树的 最底层 最左边 节点的值,层序遍历获取最后一层首个节点值,记录每一层的首个节点,当没有下一层时,返回这个节点 class Solutio ...
- Leetcode之深度优先搜索(DFS)专题-513. 找树左下角的值(Find Bottom Left Tree Value)
Leetcode之深度优先搜索(DFS)专题-513. 找树左下角的值(Find Bottom Left Tree Value) 深度优先搜索的解题详细介绍,点击 给定一个二叉树,在树的最后一行找到最 ...
- LeetCode 513. 找树左下角的值(Find Bottom Left Tree Value)
513. 找树左下角的值 513. Find Bottom Left Tree Value 题目描述 给定一个二叉树,在树的最后一行找到最左边的值. LeetCode513. Find Bottom ...
- Java实现 LeetCode 513 找树左下角的值
513. 找树左下角的值 给定一个二叉树,在树的最后一行找到最左边的值. 示例 1: 输入: 2 / \ 1 3 输出: 1 示例 2: 输入: 1 / \ 2 3 / / \ 4 5 6 / 7 输 ...
- 领扣(LeetCode)找树左下角的值 个人题解
给定一个二叉树,在树的最后一行找到最左边的值. 示例 1: 输入: 2 / \ 1 3 输出: 1 示例 2: 输入: 1 / \ 2 3 / / \ 4 5 6 / 7 输出: 7 注意: 您可以假 ...
- [Swift]LeetCode513. 找树左下角的值 | Find Bottom Left Tree Value
Given a binary tree, find the leftmost value in the last row of the tree. Example 1: Input: 2 / \ 1 ...
- 513 Find Bottom Left Tree Value 找树左下角的值
给定一个二叉树,在树的最后一行找到最左边的值. 详见:https://leetcode.com/problems/find-bottom-left-tree-value/description/ C+ ...
- Leetcode513. Find Bottom Left Tree Value找树左下角的值
给定一个二叉树,在树的最后一行找到最左边的值. 示例 1: 输入: 2 / \ 1 3 输出: 1 示例 2: 输入: 1 / \ 2 3 / / \ 4 5 6 / 7 输出: 7 注意: 您可以假 ...
- leetcode刷题记录——树
递归 104.二叉树的最大深度 /** * Definition for a binary tree node. * public class TreeNode { * int val; * Tree ...
- [LeetCode] Find Bottom Left Tree Value 寻找最左下树结点的值
Given a binary tree, find the leftmost value in the last row of the tree. Example 1: Input: 2 / \ 1 ...
随机推荐
- [转帖]exportfs命令
https://www.cnblogs.com/xzlive/p/9766388.html exportfs命令:功能说明 :NFS共享管理语法格式exportfs [必要参数][选择参数][目录]功 ...
- elementUI自定义单选框内容
<template> <div> <div class="heng-div"> <el-radio v-model="radio ...
- 防止xxs攻击,input表单中不能输入script标签
在web网页中,所有的项目中.input表单中不能让用户输入script这些敏感性的. 一旦出现提示用户非正常输入.然后立刻将值清空 <el-input style="width:35 ...
- 解锁ChatGLM-6B的潜力:优化大语言模型训练,突破任务困难与答案解析难题
解锁ChatGLM-6B的潜力:优化大语言模型训练,突破任务困难与答案解析难题 LLM(Large Language Model)通常拥有大量的先验知识,使得其在许多自然语言处理任务上都有着不错的性能 ...
- python随机种子seed的作用(强化学习常用到)
先上代码 import math import gym from gym import spaces, logger from gym.utils import seeding import nump ...
- Python自动化办公--Pandas玩转Excel数据分析【二】
相关文章: Python自动化办公--Pandas玩转Excel[一] Python自动化办公--Pandas玩转Excel数据分析[三] python处理Excel实现自动化办公教学(含实战)[一] ...
- 【8】同步vscode配置和插件【导入导出】、再也不用担心换电脑重新安装插件了
相关文章: [1]VScode中文界面方法-------超简单教程 [2]VScode搭建python和tensorflow环境 [3]VSCode 主题设置推荐,自定义配色方案,修改注释高亮颜色 [ ...
- 遥感图像处理笔记之【FastAI Multi-label image classification】
遥感图像处理学习(4) 前言 遥感系列第4篇.遥感图像处理方向的学习者可以参考或者复刻 本文初编辑于2023年12月15日 2024年1月24日搬运至本人博客园平台 文章标题:FastAI Multi ...
- [zookeeper] 集群搭建及启动后查询服务器状态异常解决
一.集群搭建 1.每台服务器上部署zookeeper 1.将zookeeper压缩包解压到指定位置,在zookeeper解压后目录下创建数据目录zkData 2.在zkData下创建myid文件,内容 ...
- docker之redis集群部署
docker之redis集群部署 PART01: 3主3从redis集群部署 3主3从redis集群配置 关闭防火墙,启动docker服务 如果报以下错误,应该是docker 服务没有启动,可以执行下 ...