汇川AC700 PLC基于Codesys编程:从基础指令到通信配置实战
2026/9/13 12:43:01
给定一个二叉树的根节点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这段代码的核心功能是找到二叉树最底层最左侧的节点值,采用「层序遍历(BFS)+ 优先入队右子节点」的技巧实现,时间复杂度O(n)(n为节点数),空间复杂度O(n)(队列存储节点开销),是该问题的简洁高效解法。
代码利用队列实现层序遍历,但通过调整子节点入队顺序(先右后左),让最后遍历到的节点恰好是 “最底层最左侧” 的节点,无需记录层数:
deq存储待遍历节点,初始加入根节点;ans记录结果,初始化为根节点值(兜底空树 / 单节点场景);node,并更新ans为该节点的值;ans最后一次更新的值就是 “最底层最左侧” 节点的值(因为先遍历右节点,最后遍历到的必然是最底层最左节点)。O(n);队列空间开销取决于树的宽度(最坏为最后一层节点数),是该问题的最优解法之一。/** * Definition for a binary tree node. * 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) { deque<TreeNode*> deq={root}; int ans=root->val; while(!deq.empty()){ TreeNode* node=deq.front(); deq.pop_front(); ans=node->val; if(node->right){ deq.push_back(node->right); } if(node->left){ deq.push_back(node->left); } } return ans; } };