题目链接:click~
/*题意:给定一个二叉树,将每一层的结点连接起来,要求使用O(1)的空间*/
/**
*思路:116题的变形,116给出的是完全二叉树,本体给出的是一般的二叉树
* 基本思路相同,用next记录下一层的第一个结点。pre记录当前结点的
* 前一个结点。
*/
class Solution {
public:
void connect(TreeLinkNode *root) {
if(root == NULL) return;
TreeLinkNode *currLevel = root;
while(currLevel) {
TreeLinkNode *next = NULL; //下一层的第一个结点
TreeLinkNode *pre = NULL; //当前结点的前一个结点,即左边相邻的结点
while(currLevel) {
if(next == NULL)
next = currLevel->left?currLevel->left:currLevel->right;
if(currLevel->left) {
if(pre) pre->next = currLevel->left; //改变指向
pre = currLevel->left;
}
if(currLevel->right) {
if(pre) pre->next = currLevel->right;
pre = currLevel->right;
}
currLevel = currLevel->next;
}
currLevel = next;
}
}
};