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
Solution: 1. Iterative: Two ‘while‘ loops: root->leaf and
left->right.
2. Iterative: Queue. Use extra space.
3. Recursive: DFS. Defect: Use extra stack space for recursion.
1 /** 2 * Definition for binary tree with next pointer. 3 * struct TreeLinkNode { 4 * int val; 5 * TreeLinkNode *left, *right, *next; 6 * TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 void connect(TreeLinkNode *root) { 12 while(root) { 13 TreeLinkNode* level = root; 14 TreeLinkNode* last = NULL; 15 while(level && level->left) { 16 if(last) last->next = level->left; 17 level->left->next = level->right; 18 last = level->right; 19 level = level->next; 20 } 21 root = root->left; 22 } 23 } 24 };
Populating Next Right Pointers in Each Node,布布扣,bubuko.com
Populating Next Right Pointers in Each Node
原文:http://www.cnblogs.com/zhengjiankang/p/3659929.html