博客
关于我
leetcode---987. 二叉树的垂序遍历
阅读量:187 次
发布时间:2019-02-28

本文共 1625 字,大约阅读时间需要 5 分钟。

为了解决这个问题,我们需要实现一个二叉树的垂序遍历,并按特定规则返回结点值。垂序遍历是按照垂线移动的顺序,类似于从左下方到右下方的顺序。每个结点的位置由其X和Y坐标决定,遍历时,每当垂线碰到一个结点,就按Y坐标递减的顺序报告结点值。如果两个结点位置相同,首先报告的结点值较小。

方法思路

  • 垂序遍历定义:垂序遍历是按照垂线从左到右移动的顺序进行的。每个结点的位置由其X和Y坐标决定,左子结点在(X-1, Y-1),右子结点在(X+1, Y-1)。
  • 遍历记录:使用深度优先搜索(DFS)遍历二叉树,记录每个结点的位置和值。
  • 排序规则:将记录的结点按X坐标升序排列,如果X坐标相同,按Y坐标降序排列,如果Y坐标也相同,则按结点值升序排列。
  • 结果生成:按X坐标分组,生成最终结果列表。
  • 解决代码

    #include 
    #include
    using namespace std;struct node { int x; int y; int val;};static bool cmp(node a, node b) { if (a.x != b.x) { return a.x < b.x; } else if (a.y != b.y) { return a.y > b.y; } else { return a.val < b.val; }}void dfs(int x, int y, TreeNode* root) { if (root == nullptr) return; node t; t.x = x; t.y = y; t.val = root->val; vector
    & vn = ref; vn.push_back(t); if (root->left != nullptr) { dfs(x-1, y-1, root->left); } if (root->right != nullptr) { dfs(x+1, y-1, root->right); }}vector
    > verticalTraversal(TreeNode* root) { vector
    vn; dfs(0, 0, root); sort(vn.begin(), vn.end(), cmp); vector
    > res; if (vn.empty()) return res; int t = vn[0].x; vector
    tmp; tmp.push_back(vn[0].val); for (size_t i = 1; i < vn.size(); ++i) { if (vn[i].x == t) { tmp.push_back(vn[i].val); } else { res.push_back(tmp); tmp.clear(); t = vn[i].x; tmp.push_back(vn[i].val); } } res.push_back(tmp); return res;}

    代码解释

  • 结构体定义:node 结构体用于存储每个结点的X、Y坐标和值。
  • 比较函数:用于排序,先比较X坐标升序,如果X坐标相同,比较Y坐标降序,最后比较值升序。
  • DFS遍历:递归遍历二叉树,记录每个结点的位置和值。
  • 排序:将记录的结点按定义的规则排序。
  • 结果生成:按X坐标分组,生成最终结果列表。
  • 通过这种方法,我们可以有效地实现垂序遍历,并按要求返回结点值列表。

    转载地址:http://lxki.baihongyu.com/

    你可能感兴趣的文章
    Python 中多线程与多处理之间的区别
    查看>>
    Python 从入门到精通:30天速成教程到底有多狠?你能坚持下来吗?
    查看>>
    Python 从数据库中存储和检索密码的最安全方法
    查看>>
    Python语言及其应用 - 知识点遍历
    查看>>
    Python 优化提速的 8 个小技巧
    查看>>
    Python 余弦相似度与皮尔逊相关系数 计算
    查看>>
    python 使用execjs 报编码错误解决办法,UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xac in position 145: il
    查看>>
    python 使用filetype校验文件
    查看>>
    Python 使用flush函数将缓冲区数据立即写磁盘
    查看>>
    python 使用in判断不准确,in不好使
    查看>>
    Python 使用pandas 进行查询和统计详解
    查看>>
    Redis 配置文件redis.conf详细解释
    查看>>
    python网络爬虫(2)——scrapy框架的基础使用
    查看>>
    Python 使用哈希函数用于加密
    查看>>
    Python 依赖管理的革新——Poetry 深度解析
    查看>>
    python 保留精度及增加去除数字的千位分隔符(金额化数字)
    查看>>
    python 倒计时 9,8,7,。。。。。。0
    查看>>
    Python 入门开发学习笔记之数据的增删改查
    查看>>
    Python 入门教程(2)搭建环境 2.4、VSCode配置Node.js运行环境
    查看>>
    Python 内存管理
    查看>>