• LeetCode:117. 填充每个节点的下一个右侧节点指针 II(C++)


    117. 填充每个节点的下一个右侧节点指针 II

    题目描述:

    给定一个二叉树

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

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

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

    示例 1:

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

    示例 2:

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

    提示:

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

    实现代码与解析:

    层次遍历:

    1. /*
    2. // Definition for a Node.
    3. class Node {
    4. public:
    5. int val;
    6. Node* left;
    7. Node* right;
    8. Node* next;
    9. Node() : val(0), left(NULL), right(NULL), next(NULL) {}
    10. Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {}
    11. Node(int _val, Node* _left, Node* _right, Node* _next)
    12. : val(_val), left(_left), right(_right), next(_next) {}
    13. };
    14. */
    15. class Solution {
    16. public:
    17. Node* connect(Node* root) {
    18. if (!root) {
    19. return NULL;
    20. }
    21. queue q;
    22. q.push(root);
    23. while(q.size()) {
    24. int n = q.size();
    25. Node *last = NULL;
    26. for (int i = 0; i < n; i++) {
    27. Node *t = q.front();
    28. q.pop();
    29. if (i != 0) { // 不是第一个,连接
    30. last->next = t;
    31. }
    32. last = t;
    33. if (t->left) q.push(t->left);
    34. if (t->right) q.push(t->right);
    35. }
    36. }
    37. return root;
    38. }
    39. };
  • 相关阅读:
    Java 21 新特性:虚拟线程(Virtual Threads)
    4.超链接
    Temporal对比Cadence
    openssh快速安装
    STM32网口学习
    【电源专题】开关模式电源电流检测——电流检测方法
    Vue项目的学习一
    用于准确量化颅面对称性和面部生长的 3D 头影测量方案(Matlab代码实现)
    手机app控制esp32-cam拍照上传,tcp和mqtt协议
    Ansible之playbooks剧本
  • 原文地址:https://blog.csdn.net/Cosmoshhhyyy/article/details/134212443