解析:这两道题考察都是层次遍历算法,我采用了同一种解法,代码没有任何改动
将队列作为保存节点的结构,并将NULL指针作为每一层节点的结束符
1.将头节点入队列,并将NULL指针作为第一层的结束符
2.遍历当前层的节点,并将其左右非空节点入队列,将其节点的next指针指向队列的下一个节点(右边的节点),直到节点为NULL,即当层节点遍历完
3.依次对每一层节点执行上面的步骤
关键:
1.每层节点的结束标识为NULL
2.遍历完本层节点后,若队列的第一个元素为NULL,即表示所有节点已经遍历完
if (list.front() == NULL) break;
/*
// Definition for a Node.
class Node {
public:
int val;
Node* left;
Node* right;
Node* next;
Node() {}
Node(int _val, Node* _left, Node* _right, Node* _next) {
val = _val;
left = _left;
right = _right;
next = _next;
}
};
*/
class Solution {
public:
Node* connect(Node* root) {
queue<Node*> list;
list.push(root);
list.push(NULL); //NULL指针记录终止符
while (!list.empty()){
while (list.front() != NULL){ //遍历当前层
Node* temp = list.front();
list.pop();
temp->next = list.front(); //将左节点的next指针指向右节点
if (temp->left != NULL) list.push(temp->left);
if (temp->right != NULL) list.push(temp->right);
}
list.pop();
list.push(NULL); //下一层节点
if (list.front() == NULL) break;
}
return root;
}
};