📣 独立日限时特惠: VIP通行证立减$68
123
返回列表 发新帖
楼主: zhanym0981
跳转到指定楼层
上一主题 下一主题
收起左侧

脸熟跪经

🔗
badbeat 2017-9-28 08:55:06 | 只看该作者
全局:
张欣 发表于 2017-9-28 07:27
请问楼主,第二题是不是可以从头开始挨个读,读到第一s1就先s1存到stack,接着读s1 的child pointer的链表 ...

我也想的是用stack, 但是试了下感觉逻辑有点乱
回复

使用道具 举报

全局:
第二题只想到用queue做。有不需要额外空间的做法吗?
回复

使用道具 举报

🔗
nsk1102 2017-9-28 10:19:29 | 只看该作者
全局:
同意楼上,用一个Queue应该可以解决啊
回复

使用道具 举报

🔗
amber110 2017-9-29 03:29:47 | 只看该作者
全局:
第二题 dfs recursive 不用class variable的话每次返回updated tail应该可以吧。iterative 用一个stack,每次先push next 再push child应该也可以。多谢楼主分享。
回复

使用道具 举报

🔗
shawnzhao 2017-9-29 10:28:38 | 只看该作者
全局:
第二题如果是recursive来做,不用全局的话,就先save next,然后把s的flatten之后,再找到当前tail换成next可以吗? 代码大概是这样
Node* flattenList(Node* node, Node* s)
{
    if (node == NULL)
        return NULL;
       
        Node* head = new Node(0);
        head->next = node;

        Node* cur = head;
        while (cur->next && cur->next != s) cur = cur->next;
        if (cur->next == s) {
                        Node *next = cur->next->next;
                        cur->next = flattenList(s->child);
                        if (next)
                                        while (cur->next) cur = cur->next;
                                        cur->next = flattenList(next, s);
        }

    return head->next;
}
回复

使用道具 举报

🔗
shawnzhao 2017-9-29 10:48:28 | 只看该作者
全局:
或者可以想成是二叉树的preorder嘛,s的下一层其实就是left,s的next其实就是right啊
回复

使用道具 举报

🔗
yixing98 2017-12-16 07:44:36 | 只看该作者
全局:
请问楼主第二题对应lc上哪一道呀?
回复

使用道具 举报

🔗
lzsapril666 2017-12-17 05:54:52 | 只看该作者
全局:
既然是dfs 那就不能用queue吧 写了一个iterative的方法 有没有老铁讨论一下这道题 不太懂recursive的方法

struct Node{
        int val;
        Node* next;
        Node* child;
}

class Iterator {
private:
        stack<Node*> nodes;
public:
        Iterator(Node* root){
                nodes.push(root);
        }
       
        int next(){
                Node* res = nodes.top();
                nodes.pop();
                if(res->next){
                        nodes.push(res->next);
                }
                return res->val;
        }
       
        bool hasNext(){
                while(!nodes.empty()){
                        Node* curr = nodes.top();
                        if(curr->child == NULL){
                                return true;
                        }
                        nodes.pop();
                        if(curr->next){
                                nodes.push(curr->next);
                        }
                        while(curr->child){
                                nodes.push(curr->child);
                                curr = curr->child;
                        }
                }
                return false;
        }
}
回复

使用道具 举报

🔗
manmankan 2017-12-17 11:05:13 | 只看该作者
全局:
感谢分享 楼主加油
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表