116. Populating Next Right Pointers in Each Node
C++,dfs深搜解决。
题意看了好久才看懂,其实就是将每一层的点都连接起来。每个结点的next指针都指向右边的结点,这样分两种情况:
- 如果右边结点是亲兄弟结点,则在遍历到父节点的时候就
root->left->next = root->right;
; - 如果右边结点是堂兄弟结点,则在遍历到父节点的时候(此时父节点的next指针已经指向了右边的兄弟节点),通过父节点的next指针与右边结点相接:
root->right->next = root->next->left;
代码如下:
class Solution {
public:
Node* connect(Node* root) {
if (!root) return NULL;
if (root->left) root->left->next = root->right;
if (root->next && root->right)
root->right->next = root->next->left;
connect(root->left);
connect(root->right);
return root;
}
};