aboutsummaryrefslogtreecommitdiff
path: root/populating_right_pointer.cpp
diff options
context:
space:
mode:
authorjack <0x6A73@pm.me>2024-06-14 13:13:15 -0600
committerjack <0x6A73@pm.me>2024-06-14 13:13:15 -0600
commitd343a3b18dbaca9297d4f7b2280c4a16f0a5c8aa (patch)
tree96df922dae2a5073d9a50ea70c7aae6aa37e3ebe /populating_right_pointer.cpp
downloadleetcode-d343a3b18dbaca9297d4f7b2280c4a16f0a5c8aa.tar.gz
leetcode-d343a3b18dbaca9297d4f7b2280c4a16f0a5c8aa.zip
initial
Diffstat (limited to 'populating_right_pointer.cpp')
-rw-r--r--populating_right_pointer.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/populating_right_pointer.cpp b/populating_right_pointer.cpp
new file mode 100644
index 0000000..d977321
--- /dev/null
+++ b/populating_right_pointer.cpp
@@ -0,0 +1,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() {}