/*
// Definition for a Node.
class Node {
public int val;
public Node prev;
public Node next;
public Node child;
};
*/
class Solution {
public Node flatten(Node head) {
dfs(head);
return head;
}
// 采用深度优先算法
public Node dfs(Node node){
// 当前节点
Node cur = node;
// 当前节点的上个节点
Node last = null;
while(cur != null){
// 当前节点的下个节点
Node next = cur.next;
// 如果当前的子列表不为空
if(cur.child != null){
// 递归
Node childLast = dfs(cur.child);
cur.next = cur.child;
cur.child.prev = cur;
if(next != null){
childLast.next = next;
next.prev = childLast;
}
// 将当前节点的子列表置为空
cur.child = null;
last = childLast;
}else{
last = cur;
}
cur = next;
}
return last;
}
}