Given a binary tree
struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; }
Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to NULL
.
Initially, all next pointers are set to NULL
.
Note:
- You may only use constant extra space.
- Recursive approach is fine, implicit stack space does not count as extra space for this problem.
- You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent has two children).
Example:
Given the following perfect binary tree,
1 / \ 2 3 / \ / \ 4 5 6 7
After calling your function, the tree should look like:
1 -> NULL / \ 2 -> 3 -> NULL / \ / \
class Solution { public: void connect(TreeLinkNode *root) { if (root == NULL) return; TreeLinkNode * node = NULL; TreeLinkNode * pre = NULL; queue<TreeLinkNode * > que; que.push(root); int last = 1; int now = 0; int nextlast = 1; while (!que.empty()) { node = que.front(); que.pop(); if (node->left != NULL) { que.push(node->left); nextlast++; } if (node->right != NULL) { que.push(node->right); nextlast++; } if (pre != NULL) { pre->next = node; } now++; if (now == last) { node->next = NULL; pre = NULL; last = nextlast; } else { pre = node; } } } };