网站开发后期要解决的问题,wordpress quiz addon,网站建设_网站设计 app制作,搜索引擎网站入口文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析#xff1a;这道题用层序遍历来做比较简单#xff0c;最底层最左边节点就是层序遍历当中最底层元素容器的第一个值… 文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析这道题用层序遍历来做比较简单最底层最左边节点就是层序遍历当中最底层元素容器的第一个值层序遍历利用了【算法和数据结构】102、LeetCode二叉树的层序遍历文章中的迭代法稍加修改就可以实现题目要求。 程序如下
// 层序遍历迭代法
class Solution {
public:int findBottomLeftValue(TreeNode* root) {queueTreeNode* que;if (root ! NULL) que.push(root);int result 0;while (!que.empty()) {int size que.size(); // size必须固定, que.size()是不断变化的for (int i 0; i size; i) {TreeNode* node que.front();que.pop();if (i 0) result node-val; // 访问容器当中第一个元素if (node-left) que.push(node-left);if (node-right) que.push(node-right);}}return result;}
};复杂度分析
时间复杂度 O ( n ) O(n) O(n)。空间复杂度 O ( n ) O(n) O(n)。
三、完整代码
# include iostream
# include vector
# include queue
# include string
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) {queueTreeNode* que;if (root ! NULL) que.push(root);int result 0;while (!que.empty()) {int size que.size(); // size必须固定, que.size()是不断变化的for (int i 0; i size; i) {TreeNode* node que.front();que.pop();if (i 0) result node-val; // 访问容器当中第一个元素if (node-left) que.push(node-left);if (node-right) que.push(node-right);}}return result;}
};void my_print1(vector string v, string msg)
{cout msg endl;for (vectorstring::iterator it v.begin(); it ! v.end(); it) {cout *it ;}cout endl;
}void my_print2(vectorvectorint v, string str) {cout str endl;for (vectorvectorint::iterator vit v.begin(); vit v.end(); vit) {for (vectorint::iterator it (*vit).begin(); it (*vit).end(); it) {cout *it ;}cout endl;}
}// 前序遍历递归法创建二叉树每次迭代将容器首元素弹出弹出代码还可以再优化
void Tree_Generator(vectorstring t, TreeNode* node) {if (t[0] NULL || !t.size()) return; // 退出条件else {node new TreeNode(stoi(t[0].c_str())); // 中t.assign(t.begin() 1, t.end());Tree_Generator(t, node-left); // 左t.assign(t.begin() 1, t.end());Tree_Generator(t, node-right); // 右}
}int main()
{vectorstring t { 3, 9, NULL, NULL, 20, 15, NULL, NULL, 7, NULL, NULL }; // 前序遍历my_print1(t, 目标树:);TreeNode* root new TreeNode();Tree_Generator(t, root);Solution s1;int result s1.findBottomLeftValue(root);cout 最底层最左边元素为 result endl; system(pause);return 0;
}end