题目要求:https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/
算法:
- 这是一道模拟类型的题,跟着题目条件走就行
- 我运用了递归的思想
- 主体:我先判断root是否为空(因为下面会用到root->left等,如果root为空,就不能使用root->left会报错)。再对左右分情讨论:首先左子树上结点的next一定等于root->right,问题不大;右子树上的结点就需要分析,首先,每一行最右边的结点的next一定是NULL,这个没有问题吧,接着呢,再左子树和右子树的交界处,我们就用root的next来处理:root->right->next = root->next->left;即可。
- 时间复杂度:O(N),只是遍历了一边树。空间复杂度:O(0),没有使用外部空间
源代码:
class Solution {
public:
void fun(Node* root){
if(root == NULL){
return ;
}
if(root->left != NULL){
root->left->next = root->right;
connect(root->left);
}
if(root->right != NULL){
if(root->next != nullptr){
root->right->next = root->next->left;
}
else{
root->right->next = NULL;
}
connect(root->right);
}
}
Node* connect(Node* root) {
fun(root);
return root;
}
};