image.png

思路:

  • 层次遍历二叉树
  • 每一层都建立链表
  • 为了不使用额外空间,所以采用cur_node->next = q.front() 这样的结构

    代码:

  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 nullptr;
  20. }
  21. queue<Node*> q;
  22. q.push(root);
  23. while (!q.empty()) {
  24. int cur_level_size = q.size();
  25. for (int i = 0; i < cur_level_size; ++i) {
  26. Node* cur_node = q.front();
  27. q.pop();
  28. if (i != cur_level_size - 1) {
  29. cur_node->next = q.front();
  30. } else {
  31. cur_node->next = nullptr;
  32. }
  33. if (cur_node->left) q.push(cur_node->left);
  34. if (cur_node->right) q.push(cur_node->right);
  35. }
  36. }
  37. return root;
  38. }
  39. };