描述:
给定一个二叉树
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; } };
Populating Next Right Pointers in Each Node 2
原文:https://www.cnblogs.com/wangkaia/p/11998912.html