描述:
给定一个二叉树
struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。
初始状态下,所有 next 指针都被设置为 NULL。
解答:
本题相较于上一题,缺少了要操作的树为完全二叉树的条件。因此在寻找同一层次上的next节点时候,节点不一定仅仅
存在于当前的节点的cur->next->left或者是cur->right的位置,这两个位置现在都可能为空,因此可能要在一层上一直向右
寻找第一个next节点。具体的递归代码如下:
class Solution {
public:
Node* connect(Node* root) {
if (!root) return NULL;
Node *p = root->next;
while (p) {//向右一直寻找到第一个next节点
if (p->left) {
p = p->left;
break;
}
if (p->right) {
p = p->right;
break;
}
p = p->next;
}
if (root->right) root->right->next = p;
if (root->left) root->left->next = root->right ? root->right : p;
connect(root->right);
connect(root->left);
return root;
}
};