深搜+栈==实现扁平化多级双向链表
Posted C_YCBX Py_YYDS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深搜+栈==实现扁平化多级双向链表相关的知识,希望对你有一定的参考价值。
题目
解题概述
看了这个扁平化实现的简介,第一时间就能想到用深搜,但注意还要实现对尾部连接,这个我是想到用栈存储然后再处理的方式,官方题解就是一次递归就解决了。
解题代码
//一看就老深搜了
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——430. 扁平化多级双向链表(Java)
LeetCode 430. 扁平化多级双向链表 / 583. 两个字符串的删除操作 / 478. 在圆内随机生成点(拒绝采样圆形面积推导)