题目链接:https://leetcode.com/problems/populating-next-right-pointers-in-each-node/#/description
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) {
if(root==NULL)
return ;
while(root->left)
{
TreeLinkNode *cur=root;
while(cur)
{
cur->left->next=cur->right;
if(cur->next)
cur->right->next=cur->next->left;
cur=cur->next;
}
root=root->left;
}
}
};
方法二(层次遍历):
class Solution{
public:
void connect(TreeLinkNode *root)
{
if(!root)
return;
queue<TreeLinkNode*> q;
q.push(root);
TreeLinkNode* pre,* curr;
while(!q.empty())
{
int size=q.size();
for(int i=0;i<size;i++)
{
if (i == 0)
pre = q.front();
else if(i<size)
{
curr=q.front();
pre->next=curr;
pre=curr;
}
TreeLinkNode *t = q.front();
q.pop();
if (t->left)
q.push(t->left);
if (t->right)
q.push(t->right);
}
}
}
};