问题
https://leetcode-cn.com/problems/flatten-a-multilevel-doubly-linked-list/
多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。
给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。
给定
输出
解决
很明显是个递归问题,主要就是这个深度优先遍历怎么写。
主要就是存储一个last,记录已经扁平化序列的末尾,然后每次将其与当前节点相连,再将其变为当前节点,然后整理child,将child设为None,再整理next
python实现
class Solution(object):
def flatten(self, head):
"""
:type head: Node
:rtype: Node
"""
self.last = None
def dfs(node):
if not node:
return
nxt = node.next
if self.last:
self.last.next, node.prev = node, self.last
self.last = node
dfs(node.child)
node.child = None
dfs(nxt)
dfs(head)
return head