填充每个节点的下一个右侧节点Ⅱ-力扣

本题如果使用BFS去层序遍历,代码和 填充每个节点的下一个右侧节点 题没有任何区别。但是使用已经建立好的next链表去做,则需要考虑到next指向的节点子节点是否为空的可能。

cpp 复制代码
class Solution {
public:
    Node* connect(Node* root) {
        if(root == nullptr){
            return nullptr;
        }
        Node * head = root;
        while(head != nullptr){
            Node * dummy = new Node(0);
            Node * temp = dummy;
            
            for(Node* cur = head; cur != nullptr; cur = cur->next){
                if(cur->left != nullptr){
                    temp->next =cur->left;
                    temp = temp->next;
                }
                if(cur->right != nullptr){
                    temp->next = cur->right;
                    temp = temp->next;
                }
            }
            head = dummy->next;
        }

        return root;
    }
};

使用DFS来解决,通过一个数组来记录每一层的前节点,然后不断更新这个数组。

cpp 复制代码
class Solution {
public:
    void dfs(Node* root, vector<Node*>& vec, int depth){
        if(root == nullptr){
            return;
        }
        if(depth >= vec.size()){
            vec.push_back(nullptr);
        }
        if(vec[depth] != nullptr){
            vec[depth]->next = root;
        }
        vec[depth] = root;
        dfs(root->left, vec, depth + 1);
        dfs(root->right, vec, depth + 1);
    }

    Node* connect(Node* root) {
        vector<Node*> vec;
        int depth = 0;
        dfs(root, vec, depth);
        return root;
    }
};
相关推荐
元亓亓亓1 小时前
LeetCode热题100--41. 缺失的第一个正数--困难
数据结构·算法·leetcode
fu的博客1 小时前
【数据结构7】链式栈实现
数据结构·算法
额,不知道写啥。2 小时前
P5314 ODT(毒瘤树剖)
数据结构·c++·算法
CHANG_THE_WORLD2 小时前
深入指针5:回调函数与泛型排序
数据结构·算法
qq_454245032 小时前
计算机与AI领域中的“上下文”:多维度解析
数据结构·人工智能·分类
今儿敲了吗2 小时前
24| 字符串
数据结构·c++·笔记·学习·算法
小龙报2 小时前
【51单片机】不止是调光!51 单片机 PWM 实战:呼吸灯 + 直流电机正反转 + 转速控制
数据结构·c++·stm32·单片机·嵌入式硬件·物联网·51单片机
qq_454245033 小时前
Graphkey:使用占位符彻底解耦函数与工作流
数据结构·c#
测绘工程师3 小时前
【排序算法】冒泡排序
数据结构·算法·排序算法
载数而行5203 小时前
算法系列1之最小生成树
c语言·数据结构·c++·算法·贪心算法