思路:
方法一:DFS。
时间复杂度O(N),空间复杂度O(lgN)。
由于递归需要栈,所以空间复杂度没有达到题目要求的O(1)。
/**
* Definition for binary tree with next pointer.
* struct TreeLinkNode {
* int val;
* TreeLinkNode *left, *right, *next;
* TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {}
* };
*/
class Solution {
public:
void connect(TreeLinkNode *root) {
if(root == NULL || root->left == NULL) return;
TreeLinkNode *cur;
while(root->left != NULL) {
cur = root;
while(cur != NULL) {
cur->left->next = cur->right;
if(cur->next != NULL) {
cur->right->next = cur->next->left;
}
cur = cur->next;
}
root = root->left;
}
}
};
注意如果是单root节点,直接返回,因为:
Initially, all next pointers are set to NULL
.
否则的话层层遍历,因为上一层的next设置好了,下一层就可以直接通过上一层的next到sibling节点上,且第一层的next可以直接设置,因为就有left和right两个节点。