Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // http://leetcode.com/onlinejudge#question_116
- /*
- 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.
- You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent has two children).
- For 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
- / \ / \
- 4->5->6->7 -> NULL
- */
- class Solution {
- public:
- void connect(TreeLinkNode *root) {
- // Start typing your C/C++ solution below
- // DO NOT write int main() function
- if(!root) { return; }
- reset(root);
- connectImpl(root);
- }
- void connectImpl(TreeLinkNode * n)
- {
- if(!n) { return; }
- TreeLinkNode * L = n->left, * R = n->right;
- if(!L || !R) { return; }
- for(; L != NULL && R != NULL; L = L->right, R = R->left)
- {
- L->next = R;
- }
- connectImpl(n->left);
- connectImpl(n->right);
- }
- void reset(TreeLinkNode* n )
- {
- if(!n) { return; }
- n->next = NULL;
- reset(n->left);
- reset(n->right);
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment