/**
* 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 levelfun(vector<TreeLinkNode*> &temp)
{
vector<TreeLinkNode*> temp2;
bool flag=false;
for (auto x = temp.begin(); x != temp.end(); x++)
{
if (*x != NULL)
{
if((*x)->left!=NULL)temp2.push_back((*x)->left);
if((*x)->right!=NULL)temp2.push_back((*x)->right);
if (x != temp.end() - 1)
{
(*x)->next = *(x + 1);
}
}
}
if(temp2.size()!=0)levelfun(temp2);
}
void connect(TreeLinkNode *root)
{
if (root != NULL)
{
root->next = NULL;
vector<TreeLinkNode*> temp;
if(root->left!=NULL)
{
temp.push_back(root->left);
}
if(root->right!=NULL)
{
temp.push_back(root->right);
}
if(temp.empty()==false)levelfun(temp);
}
}
};
解法同上
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.
Example:
Given the following binary tree,
1 / \ 2 3 / \ \ 4 5 7
After calling your function, the tree should look like:
1 -> NULL / \ 2 -> 3 -> NULL / \ \ 4-> 5 -> 7 -> NULL