题目链接:LCR 045. 找树左下角的值 - 力扣(LeetCode)
题目:
如何在一棵二叉树中找出它最低层最左边节点的值?假设二叉树中最少有一个节点。例如,在下图所示的二叉树中最低层最左边一个节点的值是 5。
分析:
这是一个关于二叉树的问题,而且还与二叉树的层相关,因此基本可以确定这个题目是在考查二叉树的广度优先搜索。通常,广度优先搜索算法是从上到下遍历二叉树的每一层,并且从左到右遍历同一层中的每个节点。位于某一层最左边的节点就是该层中第 1 个遍历到的节点,最低层最左边的节点就是最后一层的第 1 个节点。
可以用一个变量 bottomLeft 来保存每一层最左边的节点值。在遍历二叉树时,每当遇到新的一层时就将变量 bottomLeft 的值更新为该层第 1 个节点的值。当整棵二叉树都被遍历完之后,变量 bottomLeft 的值就是最后一次更新的值,也就是最后一层的第 1 个节点的值。
代码实现:
class Solution {
public:int findBottomLeftValue(TreeNode* root) {queue<TreeNode*> q;q.push(root); // 二叉树中最少有一个节点int curLevelSize = 1;int bottomLeft = root->val;while (curLevelSize){while (curLevelSize--){TreeNode* front = q.front();q.pop();if (front->left)q.push(front->left);if (front->right)q.push(front->right);}curLevelSize = q.size();if (curLevelSize != 0)bottomLeft = q.front()->val;}return bottomLeft;}
};