• 【leetcode面试经典150题】74. 填充每个节点的下一个右侧节点指针 II(C++)


    【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C++语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致)

    【题目描述】

    给定一个二叉树:

    struct Node {
      int val;
      Node *left;
      Node *right;
      Node *next;
    }

    填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL 。

    初始状态下,所有 next 指针都被设置为 NULL 。

    【示例一】

    输入:root = [1,2,3,4,5,null,7]
    输出:[1,#,2,3,#,4,5,7,#]
    解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化输出按层序遍历顺序(由 next 指针连接),'#' 表示每层的末尾。

    【示例二】

    输入:root = []
    输出:[]

    【提示及数据范围】

    • 树中的节点数在范围 [0, 6000] 内
    • -100 <= Node.val <= 100

    【代码】

    1. // 方法一:层次遍历
    2. class Solution {
    3. public:
    4. Node* connect(Node* root) {
    5. if (!root) {
    6. return nullptr;
    7. }
    8. queue q;
    9. q.push(root);
    10. while (!q.empty()) {
    11. int n = q.size();
    12. Node *last = nullptr;
    13. for (int i = 1; i <= n; ++i) {
    14. Node *f = q.front();
    15. q.pop();
    16. if (f->left) {
    17. q.push(f->left);
    18. }
    19. if (f->right) {
    20. q.push(f->right);
    21. }
    22. if (i != 1) {
    23. last->next = f;
    24. }
    25. last = f;
    26. }
    27. }
    28. return root;
    29. }
    30. };
    31. // 方法二:使用已建立的 next 指针
    32. class Solution {
    33. public:
    34. void handle(Node* &last, Node* &p, Node* &nextStart) {
    35. if (last) {
    36. last->next = p;
    37. }
    38. if (!nextStart) {
    39. nextStart = p;
    40. }
    41. last = p;
    42. }
    43. Node* connect(Node* root) {
    44. if (!root) {
    45. return nullptr;
    46. }
    47. Node *start = root;
    48. while (start) {
    49. Node *last = nullptr, *nextStart = nullptr;
    50. for (Node *p = start; p != nullptr; p = p->next) {
    51. if (p->left) {
    52. handle(last, p->left, nextStart);
    53. }
    54. if (p->right) {
    55. handle(last, p->right, nextStart);
    56. }
    57. }
    58. start = nextStart;
    59. }
    60. return root;
    61. }
    62. };
  • 相关阅读:
    java计算机毕业设计古玩玉器交易系统源码+mysql数据库+系统+lw文档+部署
    人工智能之地形导航系统
    【Java】和【C语言】实现一个有序数组的二分查找
    天宇优配|平台助企“抱团出海” “小而美”中觅“先机”
    map的一道题目<单词识别>
    面向对象编程-终结篇 es6新增语法
    2021年Java进阶面试题总结
    iOS事件传递链与响应链
    浅述AI视频智能分析技术及TSINGSEE视频智能解决方案
    NFT 交易市场的格局之变:从一家独大到百家争鸣
  • 原文地址:https://blog.csdn.net/m0_74172965/article/details/138174931