aboutsummaryrefslogtreecommitdiff
path: root/populating_right_pointer.cpp
blob: d977321adb780f2c771ba78ba5df4397359b4847 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include "leetcode.h"

class Solution {
public:
  Node *connect(Node *root) {
    Node *currParent = root, *baseChild, *currChild, *nextChild;
    while (currParent) {
      while (currParent->next && !currParent->left && !currParent->right)
        currParent = currParent->next;
      currChild = baseChild =
          currParent->left ? currParent->left : currParent->right;
      while (currChild) {
        if (currParent->right && currChild != currParent->right)
          nextChild = currParent->right;
        else {
          currParent = currParent->next;
          while (currParent && !currParent->left && !currParent->right)
            currParent = currParent->next;
          nextChild = currParent ? currParent->left ? currParent->left
                                                    : currParent->right
                                 : currParent;
        }
        currChild->next = nextChild;
        currChild = nextChild;
      }
      currParent = baseChild;
    }
    return root;
  }
};

int main() {}