• 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. };
  • 相关阅读:
    JVM-垃圾收集算法
    Nginx手动编译、安装超超详解
    考研英语小作文
    利用文件操作解决下面的程序问题
    df = pd.read_xxx(“xxx“, dtype=xxx)dtype问题
    《深度学习入门:基于Python的理论与实现》再读笔记(2)
    请问有哪些让人惊艳的数据可视化工具?
    ssh远程连接不了虚拟机ubuntu
    【ERP】负库存的优点与缺点
    页面上下左右滑动事件
  • 原文地址:https://blog.csdn.net/Cosmoshhhyyy/article/details/134212443