leetcode每日一题42

news/2025/2/12 2:43:57/

107.二叉树的层序遍历II

就层序遍历后reverse一下

class Solution {
public:vector<vector<int>> levelOrderBottom(TreeNode* root) {queue<TreeNode*> que;if(root!=nullptr)que.push(root);vector<vector<int>> result;while(!que.empty()){int size=que.size();vector<int> vec;for(int i=0;i<size;i++){TreeNode* node=que.front();que.pop();vec.push_back(node->val);if(node->left) que.push(node->left);if(node->right) que.push(node->right);}result.push_back(vec);}reverse(result.begin(),result.end());return result;}
};

109. 有序链表转换二叉搜索树

先用快慢指针找中点,再递归构造二叉搜索树
类似二分

class Solution {
public:ListNode* midNode(ListNode* left,ListNode* right){ListNode *fast,*slow;fast=left;slow=left;while(fast!=right&&fast->next!=right){fast=fast->next;fast=fast->next;slow=slow->next;}return slow;}TreeNode* buildTree(ListNode* left,ListNode* right){if(left==right)return nullptr;ListNode* mid=midNode(left,right);TreeNode* root=new TreeNode(mid->val);root->left=buildTree(left,mid);root->right=buildTree(mid->next,right);return root;}TreeNode* sortedListToBST(ListNode* head) {return buildTree(head,nullptr);//左闭右开区间}
};

113. 路径总和 II

112是返回有没有总和为给定值的路径,这道题是返回所有总和为给定值的路径
因此要遍历整个树,找到所有路径,且不用处理递归返回值,所以递归函数不要返回值!

  1. 确定递归函数的参数和返回类型
    需要二叉树的根节点,还需要一个计数器,这个计数器用来计算二叉树的一条边之和是否正好是目标和,计数器为int型
void traversal(TreeNode* cur, int count) 
  1. 确定终止条件
    让计数器count初始为目标和,然后每次减去遍历路径节点上的数值。
    如果最后count == 0,同时到了叶子节点的话,说明找到了目标和。
    如果遍历到了叶子节点,count不为0,就是没找到。
if(count==0&&!cur->left&&!cur->right){result.push_back(path);return;
}
else if (!cur->left && !cur->right)return;
  1. 确定单层递归的逻辑
    如果子节点不为空,加入path,count减去子节点值,递归,递归结束后,回溯,count加回来,去除path中的子节点
if(cur->left)
{path.push_back(cur->left->val);count-=cur->left->val;traversal(cur->left,count);count+=cur->left->val;path.pop_back();
}
if(cur->right)
{path.push_back(cur->right->val);count-=cur->right->val;traversal(cur->right,count);count+=cur->right->val;path.pop_back();
}

整体代码

class Solution {
public:vector<int> path;vector<vector<int>> result;void traversal(TreeNode* cur, int count) {if(count==0&&!cur->left&&!cur->right){result.push_back(path);return;}else if (!cur->left && !cur->right)return;if(cur->left){path.push_back(cur->left->val);count-=cur->left->val;traversal(cur->left,count);count+=cur->left->val;path.pop_back();}if(cur->right){path.push_back(cur->right->val);count-=cur->right->val;traversal(cur->right,count);count+=cur->right->val;path.pop_back();}return;}vector<vector<int>> pathSum(TreeNode* root, int targetSum) {result.clear();path.clear();if (root == NULL) return result;path.push_back(root->val); // 把根节点放进路径traversal(root, targetSum - root->val);return result;}
};

114. 二叉树展开为链表

这不就是前序遍历
其实要做的就是按前序序列创建一个树,每个节点只有右子树


http://www.ppmy.cn/news/1290733.html

相关文章

如何在Milk-V duo的小核FreeRTOS中跑i2c

前言 &#xff08;1&#xff09;PLCT实验室实习生长期招聘&#xff1a;招聘信息链接 &#xff08;2&#xff09;如果有嵌入式企业需要招聘湖南区域日常实习生&#xff0c;任何区域的暑假嵌入式软件实习岗位&#xff0c;可C站直接私聊&#xff0c;或者邮件&#xff1a;zhangyixu…

Python Pilow 颜色空间转换、图像滤镜应用、像素级操作、图像组合

在Python的Pillow库中&#xff0c;颜色空间转换、图像滤镜应用和像素级操作是常见的图像处理功能。 下面是一些示例代码来演示这些操作&#xff1a; 颜色空间转换 Pillow允许将图片从一种颜色空间转换为另一种颜色空间&#xff0c;例如将RGB转换为灰度或HSV。 from PIL imp…

工智能基础知识总结--什么是GBDT

什么是GBDT Boosting思想 Boosting方法训练基分类器时采用串行的方式,各个基分类器之间有依赖。它的基本思路是将基分类器层层叠加,每一层在训练的时候,对前一层基分类器分错的样本,给予更高的权重。测试时,根据各层分类器的结果的加权得到最终结果。 Bagging与Boosting的…

leetcode-两数之和

题目 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意顺…

Vue3.0-watch侦测器

一、用处 计算属性允许我们声明性的计算衍生值&#xff0c;然而在某些情况下&#xff0c;我们需要在状态变化的时候执行一些副作用&#xff0c;例如更改DOM&#xff0c;或者根据异步操作去修改另一处的状态。 二、侦听数据源类型 watch的第一个参数可以是不同形式的"数据…

Idea启动运行“错误:java: 无效的源发行版: 13”,如何解决?

以上是以JDK1.8的项目作为举例&#xff0c;如果您用的是其他版本请选择对应的language level idea中项目的language level的含义 language level指的是编译项目代码所用的jdk版本。那么&#xff0c;从这个定义出发会有两个小问题。 ❶ 如果project sdk是jdk8&#xff0c;那么la…

计算机毕业论文内容参考|基于智能搜索引擎的图书管理系统的设计与实现

文章目录 摘要前言绪论课题背景国内外现状与趋势课题内容相关技术与方法介绍系统分析系统设计系统实现系统测试总结与展望摘要 本文介绍了基于智能搜索引擎的图书管理系统的设计与实现。该系统旨在提供一个高效、智能化的图书管理平台,帮助用户更快、更准确地找到所需的图书资…