博客
关于我
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/

    你可能感兴趣的文章
    NT AUTHORITY\NETWORK SERVICE 权限问题
    查看>>
    NT symbols are incorrect, please fix symbols
    查看>>
    ntelliJ IDEA 报错:找不到包或者找不到符号
    查看>>
    NTFS文件权限管理实战
    查看>>
    ntko web firefox跨浏览器插件_深度比较:2019年6个最好的跨浏览器测试工具
    查看>>
    ntko文件存取错误_苹果推送 macOS 10.15.4:iCloud 云盘文件夹共享终于来了
    查看>>
    ntp server 用法小结
    查看>>
    ntpdate 通过外网同步时间
    查看>>
    ntpdate同步配置文件调整详解
    查看>>
    NTPD使用/etc/ntp.conf配置时钟同步详解
    查看>>
    NTP及Chrony时间同步服务设置
    查看>>
    NTP服务器
    查看>>
    NTP配置
    查看>>
    NUC1077 Humble Numbers【数学计算+打表】
    查看>>
    NuGet Gallery 开源项目快速入门指南
    查看>>
    NuGet(微软.NET开发平台的软件包管理工具)在VisualStudio中的安装的使用
    查看>>
    nuget.org 无法加载源 https://api.nuget.org/v3/index.json 的服务索引
    查看>>
    Nuget~管理自己的包包
    查看>>
    NuGet学习笔记001---了解使用NuGet给net快速获取引用
    查看>>
    nullnullHuge Pages
    查看>>