力扣 513 找树左下角的值
全部刷题与学习记录
原题目
题目地址:513. 找树左下角的值
给定一个二叉树,在树的最后一行找到最左边的值。
示例 1:
输入:
2
/ \
1 3
输出:
1
示例 2:
输入:
1
/ \
2 3
/ / \
4 5 6
/
7
输出:
7
考查知识点
层序遍历
自己的第一遍解法
这道题思路比较直接,层序遍历后输出最后一个数组的第一个数字就行,相当于温习一遍层序遍历
#include <iostream>
#include <queue>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(nullptr), right(nullptr) {
}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {
}
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {
}
};
class Solution {
public:
int findBottomLeftValue(TreeNode* root) {
queue<TreeNode*> que;//节点队列
que.push(root);
vector<vector<int>> res;
while (!que.empty()) {
vector<int> path;
int size = que.size();
for (int i = 0; i < size; ++i) {
//每次取出队列中所有节点,对应二叉树的某一层全部节点,再将该层所有子节点全部插入队列
TreeNode* qFront = que.front();
path.push_back(qFront->val);
if (qFront->left) que.push(qFront->left);
if (qFront->right) que.push(qFront->right);
que.pop();
}
res.push_back(path);
}
return res[res.size()-1][0];
}
};
int main() {
TreeNode x2(2), x1(1), x3(3);
x2.left = &x1;
x2.right = &x3;
Solution so;
cout << so.findBottomLeftValue(&x2);
}
好的解法
【代码随想录】大佬给出了另一种使用回溯的解法,思路:遍历二叉树的所有节点,维护一个最大深度记录,并保存最大深度记录对应的节点