JZ045:二叉树最底层最左边的值
📃 题目描述
题目链接:二叉树最底层最左边的值 、相同的题目
🔔 解题思路
方法一:采用队列进行层次遍历,每次将每层的第一个值放保存在答案,遍历完该二叉树,那必然就是最底层最左边的节点;
方法二:方法一中的需要消耗o(n)的空间,想一下,有没有不需要消耗这个空间呢,采用dfs(但是实际dfs递归栈也消耗o
(logn)的空间复杂度)
class Solution {
public:
vector<int> res = vector<int>(2, 0); // res[0]保存答案,res[1]保存该答案所在的深度
int findBottomLeftValue(TreeNode* root) {
res[0] = root->val;
backTracking(root, 0);
return res[0];
}
void backTracking(TreeNode* root, int level) {
if (root->left == nullptr && root->right == nullptr ) { //判断是否为叶子节点
if (level > res[1]) {
res[0] = root->val;
res[1] = level;
}
return;
}
if (root->left) backTracking(root->left, level + 1);
if (root->right) backTracking(root->right, level + 1);
}
};
💥 复杂度分析
- 时间复杂度:o(n);
- 空间复杂度:O(logn);