Leetcode 430 扁平化多级双向链表

对深度优先遍历的理解:
用栈保存我进行这一步就会丢掉的前一步状态。
比如,这里栈保留了双向节点的next指针。使得其next变child之后还能找到原来的next。
再比如,背包问题,栈里保留了如果不加入这个物品时的状态。然后后分别进行:加入,还原,加入其它,深入(即出栈或递归)。

Node *flatten(Node *head) {
    Node *it = head;
    stack<Node *> stack1;
    while (it) {
        if (it->child) {
               stack1.push(it->next);
                it->next = it->child;
                it->child->prev = it;
                it->child = nullptr;
            } else if (!it->next && !stack1.empty()) {
                it->next = stack1.top();
                if (it->next)
                    it->next->prev = it;
                stack1.pop();
            }
            it = it->next;
        }
        return head;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值