思路:
- 层次遍历二叉树
- 每一层都建立链表
- 为了不使用额外空间,所以采用
cur_node->next = q.front() 这样的结构
代码:
/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node* next; Node() : val(0), left(NULL), right(NULL), next(NULL) {} Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {} Node(int _val, Node* _left, Node* _right, Node* _next) : val(_val), left(_left), right(_right), next(_next) {}};*/class Solution {public: Node* connect(Node* root) { if (!root) { return nullptr; } queue<Node*> q; q.push(root); while (!q.empty()) { int cur_level_size = q.size(); for (int i = 0; i < cur_level_size; ++i) { Node* cur_node = q.front(); q.pop(); if (i != cur_level_size - 1) { cur_node->next = q.front(); } else { cur_node->next = nullptr; } if (cur_node->left) q.push(cur_node->left); if (cur_node->right) q.push(cur_node->right); } } return root; }};