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

    你可能感兴趣的文章
    php反射api
    查看>>
    PHP反射ReflectionClass、ReflectionMethod 入门教程
    查看>>
    PHP反射机制
    查看>>
    php取当天的最后一秒_Docker快速搭建PHP开发环境详细教程
    查看>>
    php取绝对值
    查看>>
    PHP变量内容的获取
    查看>>
    php各种常用的算法
    查看>>
    php各种缓存策略对比
    查看>>
    RabbitMQ高级特性 - 消息分发(限流、负载均衡)
    查看>>
    php后台“爬虫”模拟登录第三方系统
    查看>>
    php后台的在控制器中就可以实现阅读数增加
    查看>>
    php命令行生成项目结构
    查看>>
    php命名空间
    查看>>
    PHP命名空间带来的干扰
    查看>>
    PHP和MySQL Web开发从新手到高手,第1天-搭建PHP开发环境
    查看>>
    php商店管理系统,基于PHP的商店管理系统.doc
    查看>>
    PHP四大主流框架的优缺点总结
    查看>>
    PHP图片处理—PNG透明缩放并生成灰图
    查看>>
    php在liunx系统中设置777权限不起作用解决方法
    查看>>
    PHP基于openssl实现的非对称加密操作
    查看>>