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

Day95 | 灵神 | 二叉树 二叉树的垂序遍历

Day95 | 灵神 | 二叉树 二叉树的垂序遍历

987.二叉树的垂序遍历

987. 二叉树的垂序遍历 - 力扣(LeetCode)

思路:

这道题是个hard题,emm感觉是个mid题

首先这道题难点不在递归,因为递归完成的任务只是标记每个节点的row和col而已

难在对数据的处理,其实也不难,就是把所有顶点的值记录到三元组里面

第一个元素col,第二个元素row,第三个元素节点的值,按照这三个元素排序就行

按照第一个元素大小排,一样的话看第二个,还一样的话看第三个,最后输出出来就行

完整代码:

笔者用的是map<int,vector<pair<int,int>>>

第一个元素大小的排序在插入map时已经完成,因为map底层是红黑树

那就只需要对col相同的vector<pair<int,int>>排序就好了,直接使用sort

sort排序pair就是先看第一个元素大小,一样的话看第二个元素

class Solution {
public:map<int,vector<pair<int,int>>> p;void tra(TreeNode *t,int row,int col){if(t==nullptr)return ;p[col].emplace_back(row,t->val);tra(t->left,row+1,col-1);tra(t->right,row+1,col+1);}vector<vector<int>> verticalTraversal(TreeNode* root) {tra(root,0,0);vector<vector<int>> res;for(auto c:p){//排列第二个第三个元素大小ranges::sort(c.second);vector<int> path;for(auto s:c.second)path.push_back(s.second);res.push_back(path);}return res;}
};

灵神代码(四个写法,我只贴了写法一)

class Solution {map<int, vector<pair<int, int>>> groups;void dfs(TreeNode *node, int row, int col) {if (node == nullptr) {return;}// col 相同的分到同一组groups[col].emplace_back(row, node->val);dfs(node->left, row + 1, col - 1);dfs(node->right, row + 1, col + 1);}public:vector<vector<int>> verticalTraversal(TreeNode *root) {dfs(root, 0, 0);vector<vector<int>> ans;for (auto &[_, g] : groups) {ranges::sort(g);vector<int> vals;for (auto &[_, val] : g) {vals.push_back(val);}ans.push_back(vals);}return ans;}
};
http://www.xdnf.cn/news/516.html

相关文章:

  • U-Boot(Universal Bootloader)简介
  • 不带无线网卡的Linux开发板上网方法
  • 英文论文写作:常用AI工具与【新秀笔目鱼】
  • JAVA的泛型
  • jQuery — 动画和事件
  • SpringBoot学习(过滤器Filter。拦截器Interceptor。全局异常捕获处理器GlobalExceptionHandler)(详细使用教程)
  • 哲学家就餐问题(避免死锁)
  • BootStrap:进阶使用(其二)
  • 计算机网络 实验五 RIP的配置与应用
  • 序列化和反序列化
  • 第9期:文本条件生成(CLIP + Diffusion)详解
  • 基于 Python 的自然语言处理系列(82):Transformer Reinforcement Learning
  • Alan AI - 面向Web的生成式AI SDK
  • 基于C语言实现文件读取
  • Linux 第五讲 --- 权限管理
  • 6.常用控件-QWidget|windowTitle|windowIcon|qrc机制|windowOpacity|cursor(C++)
  • Amlogic S905L3 系列对比:L3A、L3B 与 L3AB 深度解析
  • Unity之如何实现RenderStreaming视频推流
  • 大学英语四级选词填空阅读题和段落匹配解析
  • 【Hot100】54. 螺旋矩阵
  • 2025.04.19-阿里淘天春招算法岗笔试-第一题
  • 金融数学专题6 证券问题与资本利得税
  • Pandas数据统计分析
  • MCS-51单片机汇编语言编程指南
  • ArcPy Mapping 模块基础
  • 3. 进程概念
  • 修改Theme SHELL美化panel
  • Docker 网络详解:从 docker0 网桥到网络命名空间
  • 复习JUC的总结笔记
  • 整流二极管详解:原理、作用、应用与选型要点