深搜+栈==实现扁平化多级双向链表

Posted C_YCBX Py_YYDS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深搜+栈==实现扁平化多级双向链表相关的知识,希望对你有一定的参考价值。


题目


OJ平台

解题概述

看了这个扁平化实现的简介,第一时间就能想到用深搜,但注意还要实现对尾部连接,这个我是想到用栈存储然后再处理的方式,官方题解就是一次递归就解决了。

解题代码

//一看就老深搜了
class Solution {
public:
    stack<Node*>St; //用栈记录下没有被处理的结点
    Node* rear = nullptr; //记录尾指针
    Node* flatten(Node* head) {
        if(!head)return nullptr;
        Node* res = dfs(head);
        handle_r();
        return res;
    }
    Node* dfs(Node* head){
        if(head->next==nullptr&&head->child==nullptr){//无法往下走的情况
            rear = head;
        }
        else if(head->child){//有下一层级的情况
            if(head->next)
            St.push(head->next);
            Node* child = head->child;
            child->prev = head;
            head->child = nullptr;
            head->next = dfs(child);
        }else {//层级为1的情况
            head->next = dfs(head->next);
        }
        return head;
    }
    //根据记录的尾指针进行连接
    void handle_r(){
        Node* r = rear;
        while(!St.empty()){
            Node* p = St.top();St.pop();
            p->prev = r;r->next = p;
            if(St.empty())
                break;
            while(p->next){
                p = p->next;
            }
            r = p;
        }
    }
};

以上是关于深搜+栈==实现扁平化多级双向链表的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode - 430 - 扁平化多级双向链表 - Java - 细喔

Leetcode——扁平化多级双向链表

LeetCode——430. 扁平化多级双向链表(Java)

leetcode中等430扁平化多级双向链表

LeetCode 430. 扁平化多级双向链表 / 583. 两个字符串的删除操作 / 478. 在圆内随机生成点(拒绝采样圆形面积推导)

数据结构与算法之深入解析“扁平化多级双向链表”的求解思路与算法示例