leetcode116.填充每个节点的下一个右侧节点指针
程序员文章站
2022-05-20 16:14:11
...
题目简述:
填充它的每个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);
}
}
推荐阅读
-
剑指offer25:复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),结果返回复制后复杂链表的head。
-
剑指offer25:复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),结果返回复制后复杂链表的head。
-
C++实现LeetCode(117.每个节点的右向指针之二)
-
填充每个节点的下一个右侧节点指针 II
-
117. 填充每个节点的下一个右侧节点指针 II
-
【C语言 LeetCode 116】填充每个节点的下一个右侧节点指针
-
leetcode116. 填充每个节点的下一个右侧节点指针
-
leetcode117. 填充每个节点的下一个右侧节点指针 II
-
leetcode116. 填充每个节点的下一个右侧节点指针/层次遍历
-
leetcode116. 填充每个节点的下一个右侧节点指针