在对二叉树进行层序遍历时,有时为了将各层的元素分开,会使用NULL标记。如下列代码所示:
void connect(TreeLinkNode *root) {
if (!root) {
return;
}
queue<TreeLinkNode*> q;
q.push(root);
q.push(NULL);
TreeLinkNode* prev = NULL;
while (!q.empty()) {
TreeLinkNode* front = q.front();
q.pop();
if (front) {
if (prev) {
prev->next = front;
}
prev = front;
if (front->left) {
q.push(front->left);
}
if (front->right) {
q.push(front->right);
}
} else {
prev = NULL;
if (!q.empty()) {
q.push(NULL);
}
}
}
}
但是请注意红色字体,只有当q为非空时,才push NULL。否则可能会陷入死循环。