题目描述
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。
代码
层序遍历
class Solution {
public:
int findBottomLeftValue(TreeNode* root) {
if (root == nullptr) return 0;
queue<TreeNode*> que;
que.push(root);
vector<int> res;
while (!que.empty()) {
vector<int> vec;
for (int i = que.size() - 1; i >= 0; i--) {
TreeNode* tmp = que.front();
que.pop();
vec.push_back(tmp->val);
if (tmp->left) que.push(tmp->left);
if (tmp->right) que.push(tmp->right);
}
res = vec;
}
return res[0];
}
};
递归+回溯
class Solution {
public:
int maxDepth = INT_MIN;
int result;
void traversal(TreeNode* root, int depth) {
if (root->left == nullptr && root->right == nullptr) {
if (depth > maxDepth) {
maxDepth = depth;
result = root->val;
}
return;
}
if (root->left) {
depth++;
traversal(root->left, depth);
depth--; //回溯
}
if (root->right) {
depth++;
traversal(root->right, depth);
depth--;
}
return;
}
int findBottomLeftValue(TreeNode* root) {
traversal(root, 0);
return result;
}
};