当前位置:网站首页>【513. 找树左下角的值】
【513. 找树左下角的值】
2022-06-22 19:11:00 【Sugar_wolf】
来源:力扣(LeetCode)
描述:
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。
示例 1:

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

输入: [1,2,3,4,null,5,6,null,null,7]
输出: 7
提示:
- 二叉树的节点个数的范围是 [1,104]
- -231 <= Node.val <= 231 - 1
方法一:深度优先搜索
使用 height 记录遍历到的节点的高度, curVal 记录高度在 curHeight 的最左节点的值。在深度优先搜索时,我们先搜索当前节点的左子节点,再搜索当前节点的右子节点,然后判断当前节点的高度 height 是否大于 curHeight,如果是,那么将 curVal 设置为当前结点的值, curHeight 设置为 height。
因为我们先遍历左子树,然后再遍历右子树,所以对同一高度的所有节点,最左节点肯定是最先被遍历到的。
代码:
class Solution {
public:
void dfs(TreeNode *root, int height, int &curVal, int &curHeight) {
if (root == nullptr) {
return;
}
height++;
dfs(root->left, height, curVal, curHeight);
dfs(root->right, height, curVal, curHeight);
if (height > curHeight) {
curHeight = height;
curVal = root->val;
}
}
int findBottomLeftValue(TreeNode* root) {
int curVal, curHeight = 0;
dfs(root, 0, curVal, curHeight);
return curVal;
}
};
执行用时:4 ms, 在所有 C++ 提交中击败了97.07%的用户
内存消耗:21 MB, 在所有 C++ 提交中击败了97.09%的用户
复杂度分析
时间复杂度: O(n),其中 n 是二叉树的节点数目。需要遍历 n 个节点。
空间复杂度: O(n)。递归栈需要占用 O(n) 的空间。
方法二:广度优先搜索
使用广度优先搜索遍历每一层的节点。在遍历一个节点时,需要先把它的非空右子节点放入队列,然后再把它的非空左子节点放入队列,这样才能保证从右到左遍历每一层的节点。广度优先搜索所遍历的最后一个节点的值就是最底层最左边节点的值。
代码:
class Solution {
public:
int findBottomLeftValue(TreeNode* root) {
int ret;
queue<TreeNode *> q;
q.push(root);
while (!q.empty()) {
auto p = q.front();
q.pop();
if (p->right) {
q.push(p->right);
}
if (p->left) {
q.push(p->left);
}
ret = p->val;
}
return ret;
}
};
执行用时:8 ms, 在所有 C++ 提交中击败了81.05%的用户
内存消耗:21.1 MB, 在所有 C++ 提交中击败了62.89%的用户
author:LeetCode-Solution添加链接描述
边栏推荐
- MYSQL 几个常用命令使用
- MySQL高级(二)
- 天,靠八股文逆袭了啊
- R语言data.table导入数据实战:data.table数据列名称的重命名(rename)
- leetcode.11 --- 盛最多水的容器
- MySQL advanced (II)
- Please describe the whole process from entering a URL in the browser to rendering the page.
- Precautions for Apollo use
- 密码学系列之:PKI的证书格式表示X.509
- Kotlin1.6.20 new features context receivers tips
猜你喜欢

从感知机到Transformer,一文概述深度学习简史

CVPR 2022 Oral | 视频文本预训练新SOTA,港大、腾讯ARC Lab推出基于多项选择题的借口任务

一个支持IPFS的电子邮件——SKIFF

Multi transactions in redis

数字化转型的失败原因及成功之道

6月第3周B站榜单丨飞瓜数据UP主成长排行榜(哔哩哔哩平台)发布!

client-go gin的简单整合十一-Delete

AAAI 2022 | 传统GAN修改后可解释,并保证卷积核可解释性和生成图像真实性

Using span method to realize row merging of multi-layer table data

Zabbix学习笔记(三十七)
随机推荐
MySQL advanced (II)
Containerd容器运行时(2):yum安装与二进制安装,哪个更适合你?
运用span-method巧妙实现多层table数据的行合并
Random talk about redis source code 122
LORA技术---LoRa信号从数据流变为LoRa扩频信号,再从射频信号通过解调变为数据
UnityEditor 编辑器脚本执行菜单
Oracle system/用户被锁定的解决方法
[in depth understanding of tcapulusdb technology] tcapulusdb operation and maintenance
[deeply understand tcapulusdb technology] how to start tcapulusdb process
A Dynamic Near-Optimal Algorithm for Online Linear Programming
【深入理解TcaplusDB技术】单据受理之创建业务指南
Dynamicdatabasesource, which supports the master-slave database on the application side
树莓派环境设置
Precautions for Apollo use
Three months of self-taught automatic test, salary from 4.5K to 15K, who knows what I have experienced?
Async-profiler介绍
Comment le sac à dos complet considère - t - il la disposition?
MySQL Basics - functions
3个月自学自动化测试,薪资从4.5K到15K,鬼知道我经历了什么?
mysql8.0忘记密码的详细解决方法
