当前位置: 首页 > news >正文

代码随想录day16二叉树4

文章目录

  • 513.找树左下角的值
  • 112. 路径总和
  • 113. 路径总和 II
  • 106.从中序与后序遍历序列构造二叉树
  • 105. 从前序与中序遍历序列构造二叉树

513.找树左下角的值

题目链接
文章讲解

/*** 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) {queue<TreeNode*> q;if(root) q.push(root);vector<int> res;int ans=0;while(!q.empty()){int k=q.size();bool flag=false;while(k--){TreeNode* node=q.front();q.pop();//每次存最左边的值if(!flag) {ans=node->val;flag=true;}if(node->left) q.push(node->left);if(node->right) q.push(node->right);}}return ans;}
};

112. 路径总和

题目链接
文章讲解

参照昨天的二叉树的所有路径

/*** 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:void all(TreeNode* cur,vector<int>& path,int targetSum,bool& flag){path.push_back(cur->val);if(!cur->left&&!cur->right){int ans=0;for(int i=0;i<path.size();i++){ans+=path[i];}if(ans==targetSum) flag=true;}if(cur->left){all(cur->left,path,targetSum,flag);path.pop_back();}if(cur->right){all(cur->right,path,targetSum,flag);path.pop_back();}}bool hasPathSum(TreeNode* root, int targetSum) {vector<int> path;bool flag=false;if(root==NULL) return false;all(root,path,targetSum,flag);return flag;}
};

113. 路径总和 II

题目链接
文章讲解

/*** 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:void all(TreeNode* cur,vector<int>& path,int targetSum,vector<vector<int>>& res){path.push_back(cur->val);if(!cur->left&&!cur->right){int ans=0;for(int i=0;i<path.size();i++){ans+=path[i];}if(ans==targetSum) {res.push_back(path);}}if(cur->left){all(cur->left,path,targetSum,res);path.pop_back();}if(cur->right){all(cur->right,path,targetSum,res);path.pop_back();}}vector<vector<int>> pathSum(TreeNode* root, int targetSum) {vector<int> path;vector<vector<int>> res;if(root==NULL) return res;all(root,path,targetSum,res);return res;}
};

106.从中序与后序遍历序列构造二叉树

题目链接
文章讲解

第一步:如果数组大小为零的话,说明是空节点了。

第二步:如果不为空,那么取后序数组最后一个元素作为节点元素。

第三步:找到后序数组最后一个元素在中序数组的位置,作为切割点

第四步:切割中序数组,切成中序左数组和中序右数组 (顺序别搞反了,一定是先切中序数组)

第五步:切割后序数组,切成后序左数组和后序右数组

第六步:递归处理左区间和右区间

/*** 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:TreeNode* solve(vector<int>& inorder, vector<int>& postorder){if(postorder.size()==0) return NULL;int fenge=postorder[postorder.size()-1];TreeNode* node=new TreeNode(fenge);if(postorder.size()==1) return node;int k=0;for(int i=0;i<inorder.size();i++){if(inorder[i]==fenge){k=i;break;}}vector<int> leftinorder(inorder.begin(),inorder.begin()+k);//特别注意这里要加1vector<int> rightinorder(inorder.begin()+k+1,inorder.end());postorder.pop_back();vector<int> leftpostorder(postorder.begin(),postorder.begin()+leftinorder.size());vector<int> rightpostorder(postorder.begin()+leftinorder.size(),postorder.end());node->left=solve(leftinorder,leftpostorder);node->right=solve(rightinorder,rightpostorder);return node;}TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {if(inorder.size()==0||postorder.size()==0) return NULL;return solve(inorder,postorder);}
};

105. 从前序与中序遍历序列构造二叉树

题目链接
文章讲解

/*** 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:TreeNode* solve(vector<int>& preorder, vector<int>& inorder){if(preorder.size()==0)  return NULL;int fenge=preorder[0];TreeNode* node=new TreeNode(fenge);if(preorder.size()==1) return node;int k;for(int i=0;i<inorder.size();i++){if(inorder[i]==fenge){k=i;break;}}vector<int> leftinorder(inorder.begin(),inorder.begin()+k);vector<int> rightinorder(inorder.begin()+k+1,inorder.end());preorder.erase(preorder.begin());vector<int> leftpreorder(preorder.begin(),preorder.begin()+leftinorder.size());vector<int> rightpreorder(preorder.begin()+leftinorder.size(),preorder.end());node->left=solve(leftpreorder,leftinorder);node->right=solve(rightpreorder,rightinorder);return node;}TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {if(preorder.size()==0||inorder.size()==0) return NULL;return solve(preorder,inorder);}
};
http://www.lqws.cn/news/533647.html

相关文章:

  • 参展回顾 | AI应用创新场景:数据分析助手ChatBI、璞公英教学平台亮相2025四川国际职教大会暨产教融合博览会
  • 装修选木地板还是瓷砖,都有哪些优势?
  • 第一章-人工智能概述-深度学习与AI发展(2/36)
  • MySQL备份和恢复
  • 亚矩阵云手机多开赋能Snapchat矩阵运营:技术原理与场景化破局
  • 解锁企业效率革命:Microsoft 365 Copilot 重塑办公新范式
  • 力扣第14题-最长公共前缀
  • UDP 缓冲区
  • 用Dockerfile点亮你的容器化世界:从零到精通
  • Webshell工具的流量特征分析(菜刀,蚁剑,冰蝎,哥斯拉)
  • aws(学习笔记第四十七课) codepipeline-docker-build
  • LINUX 626 DNS报错
  • WebRTC(十):RTP和SRTP
  • 新手向:Anaconda3的安装与使用方法
  • 【电力物联网】云–边协同介绍
  • C# 项目使用obfuscar混淆
  • ubuntu 下cursor的安装
  • 数据分享:汽车行业-汽车属性数据集
  • 儿童机器人玩具未来的市场空间有多大?
  • kafka命令行操作
  • Maven安装和重要知识点概括
  • 数据结构-第三节-树与二叉树
  • GtkSharp跨平台WinForm实现
  • 七天学会SpringCloud分布式微服务——03——Nacos远程调用
  • 01【C++ 入门基础】命名空间/域
  • vue 开启 source-map 后构建速度会很慢
  • LaTeX之中文支持和设置字体的几种方法
  • Docker 入门教程(一):从概念到第一个容器
  • php的案例分析----typecho项目
  • 华为云Flexus+DeepSeek征文|华为云ModelArts搭建Dify-LLM应用开发平台(AI智能选股大模型)