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

[leetcode]Populating Next Right Pointers in Each Node II

2014-01-15 17:15 453 查看
1
/\
23
/\\
457

1->NULL
/\
2->3->NULL
/\\
4->5->7->NULL

用O(1)的空间

那就利用next节点,一层一层的来遍历好了
首先是root,我们把它的left和right连起来
然后root切换到下一层

然后遍历下一层的每个节点(因为next连了的
再分别把他们的left,right什么的连起来

用两个变量就ok了
一个prev记录当前层前一节点是啥(用来连接的
一个next记录下一层的开始(用户切换到下一层


/**
*Definitionforbinarytreewithnextpointer.
*structTreeLinkNode{
*intval;
*TreeLinkNode*left,*right,*next;
*TreeLinkNode(intx):val(x),left(NULL),right(NULL),next(NULL){}
*};
*/
classSolution{
public:
voidconnect(TreeLinkNode*root){
TreeLinkNode*prev=nullptr;
TreeLinkNode*next=nullptr;

while(root){
prev=nullptr;
next=nullptr;
//if(next==nullptr)next=root->left?root->left:root->right;
for(;root;root=root->next){
if(next==nullptr)next=root->left?root->left:root->right;
if(root->left){
if(prev)prev->next=root->left;
prev=root->left;
}
if(root->right){
if(prev)prev->next=root->right;
prev=root->right;
}
}
root=next;
}
}
};



注释的那一句,开始一位本来是一样的嘛,但是仔细一想,我第一个left可能是空啊,当前层的第一个是叶子节点,但是他的兄弟不是啊

所以要写到循环里面,找到第一个有left或者right的节点,然后把left或者right(left优先)赋值给next


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: