-
链接 : 原题
-
题意:给定一个二叉树
结构:
使其每一个节点的next指针都指向其右侧的节点;如果右侧没有节点,就指向NULL。
如图:
- 思路:
因为是给同一层的节点加上next,所以层序遍历即可。
使用queue ,对每一层的节点,每次取出两个(如果是最后一个节点就特判,指向NULL),让前一个指向后一个即可。 - 代码:
class Solution {
public:
Node* connect(Node* root) {
if(!root) return NULL;
queue<Node*> q;
q.push(root);
while(!q.empty()){
int n = q.size();
for(int i = 0;i < n;i ++){
Node* tmp1 = q.front(); q.pop();
if(i != n-1){
Node* tmp2 = q.front();
tmp1->next = tmp2;
}
if(tmp1->left)
q.push(tmp1->left);
if(tmp1->right)
q.push(tmp1->right);
}
}
return root;
}
};
- 遇到的问题:
1、许多节点指针类的题目不要忘记首先对root进行判定
if(!root) return NULL;
2、对每一层的计数,开始时我还想每次push进queue就 num++,但是直接
n = q.size() 即可。
3、因为题目初始化的时候 next、left、right都初始化为NULL,所以
(1)如果 i == n-1 ,不用 tmp1->next = NULL ,这样会报错的。
(2)如果tmp1->left tmp1-right = NULL,也不能q.push()进去,自己默认为会push空,就不占队列,这样也会报错,所以需要if 判定。
指针真是好多细节。