题解:
/*
// Definition for a Node.
class Node {
public:
int val;
Node* prev;
Node* next;
Node* child;
};
*/
class Solution {
public:
//先序遍历结果集
vector<Node*> v;
//递归 先序遍历
void dfs(Node* head){
if(head == NULL){
return;
}
//中
v.push_back(head);
//左
dfs(head->child);
//右
dfs(head->next);
return;
}
Node* flatten(Node* head) {
//把孩子指针指向当做左子树 next指针指向当做右子树
//先序遍历
dfs(head);
//链接
int n = v.size();
for(int i = 0;i<n;i++){
if(i+1<n){
//不是最后一个
v[i]->next = v[i+1];
}
//链接前指针 不是第一个
if(i>0){
v[i]->prev = v[i-1];
}
//孩子指针全部置空
v[i]->child = NULL;
}
return head;
}
};