您的位置:首页 > Web前端 > Node.js

[leetcode]116. Populating Next Right Pointers in Each Node

2017-03-22 10:56 489 查看
题目链接:https://leetcode.com/problems/populating-next-right-poin
4000
ters-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);
}
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: