题目简述:
填充它的每个next指针,让这个指针指向其下一个右侧节点。如果找不到则为null
class Solution {
public:
Node* connect(Node* root) {
if(root == nullptr) return root;
deque<Node*> rel;
rel.push_back(root); // 队列每次都新增一个元素
int level_size = 1; // 某层的容量
while(!rel.empty()) {
if(rel.size() == level_size) {
for(int i = 0; i < level_size-1; i++) {
rel.at(i)->next = rel.at(i+1);
}
level_size *= 2;
}
Node* front = rel.at(0);
cout<<front->val<<endl;
rel.pop_front();
if(front->left != nullptr) rel.push_back(front->left);
if(front->right != nullptr) rel.push_back(front->right);
}
return root;
}
};
复习二叉树的层序遍历
#include<cstdio>
#include<queue>
using namespace std;
struct BinaryTree{
int vec;
BinaryTree* left;
BinaryTree* right;
BinaryTree(int data) : vec(data), left(nullptr), right(nullptr) {}
};
// 队列实现层序遍历
void printTree(BinaryTree* arr[]) {
queue<BinaryTree*> rel; // 定义一个队列,数据类型是二叉树指针
res.push(arr[0]);
while(!rel.empty()) {
BinaryTree* front = rel.front;
printf("%d\n", front->vec);
rel.pop(); // 删除最前面的节点
if(front->left != nullptr) rel.push(front->left);
if(front->right != nullptr) rel.push(front->right);
}
}