117. 填充每个节点的下一个右侧节点指针 II
方法:广度优先搜索BFS
涉及二叉树的搜索可能用到的:前中后序遍历(用栈)、深度优先搜索DFS(用栈)、广度优先搜索BFS(用队列)
/*
// 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 == NULL){
return NULL;
}
// 广度优先搜索利用队列,可以直接用STL的queue
queue<Node*> nodeQueue;
nodeQueue.push(root);
while(nodeQueue.size()){
// 每一层的数量
int levelCount = nodeQueue.size();
// 前一个节点;从右往左依次向右指
Node* pre = NULL;
for(int i = 0; i < levelCount; i++){
// 每次取出队首的元素,将next指向其前一个节点
Node* queueHead = nodeQueue.front();
nodeQueue.pop();
queueHead->next = pre;
pre = queueHead;
// 判断它的右左孩子;再把他的右孩子、左孩子加入到队列中,从右往左依次向右指
if(queueHead->right){
nodeQueue.push(queueHead->right);
}
if(queueHead->left){
nodeQueue.push (queueHead->left);
}
}
}
return root;
}
};