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

LeetCode116 Populating Next Right Pointers in Each Node

2016-01-03 16:24 459 查看

题目链接:

https://leetcode.com/problems/populating-next-right-pointers-in-each-node/

题目描述:

给一个满二叉树。

树的结构。

struct TreeLinkNode {
TreeLinkNode *left;
TreeLinkNode *right;
TreeLinkNode *next;
}


每一个节点的next初始都为空

把       1
/  \
2    3
/ \  / \
4  5  6  7

变为     1 -> NULL
/  \
2 -> 3 -> NULL
/ \  / \
4->5->6->7 -> NULL


题目分析:

题目要求的是空间复杂度为O(1)。所以利用队列进行广搜是不行的。

我们可以利用树结构中的next。用一个外循环控制层,外循环实现每层的开始,然而用next可以遍历每一层的所有节点,在遍历那一层节点时,要把下一层的节点next链好。

主要思路是,假设root指的是2。

root->left->next=root->right;
root->right->next=root->next->left;


代码:

class Solution {
public:
void connect(TreeLinkNode *root) {
while(root!=NULL && root->left!=NULL){
TreeLinkNode* ptr=root;
while(ptr!=NULL){
ptr->left->next=ptr->right;
if(ptr->next!=NULL){
ptr->right->next=ptr->next->left;
}
ptr=ptr->next;
}
root=root->left;
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 层序遍历