116 and 117 同一份代码: 无论什么二叉树,都可以。不一定是完全二叉树
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
使用一个层级遍历的思想。无论是不是
/**
* Definition for binary tree with next pointer.
* struct TreeLinkNode {
* int val;
* TreeLinkNode *left, *right, *next;
* TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {}
* };
*/
class Solution {
public:
void connect(TreeLinkNode *root)
{
if (!root || (!root->left && !root->right))
return;
deque<TreeLinkNode *> dp;
dp.push_back(root);
while (!dp.empty())
{
int size = dp.size();
TreeLinkNode *last = NULL;
for (int i = 0; i < size; i++)
{
TreeLinkNode *point = dp.back();
dp.pop_back();
if (point->right)
dp.push_front(point->right);
if (point->left)
dp.push_front(point->left);
point->next = last;
last = point;
}
}
}
};