聊聊跟三哥三姐面试和共事的经历

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
E轮2.5亿美元融资
K12教育独角兽一起作业
北京-诚聘人工智能/教育/大数据岗
坐标湾区
Games Startup
招聘游戏开发工程师
游戏初创公司招聘工程师、UIUX Designer和游戏策划
码农求职神器Triplebyte:
不用海投
内推多家公司面试
把贵司招聘信息放这里
查看: 1005|回复: 1
收起左侧

[树/链表/图] Populating Next Right Pointers in Each Node I, II 疑问

[复制链接] |试试Instant~ |关注本帖
oio14644 发表于 2015-8-7 13:07:03 | 显示全部楼层 |阅读模式

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?Sign Up 注册获取更多干货

x
网上找到一个解法,没看太懂,请给指点一下


特别是这一句话:dummy停留在next level的开头


http://wlcoding.blogspot.com/2015/03/populating-next-right-pointers-in-each.html?view=sidebar








两道题可以用一个算法解决。


Time ~ O(N), Space ~ O(1)
逐行完成connection:
                         1 -> NULL
                       /    \
                     2  -> 3 -> NULL         curr moves from left to right (current level)
                    /  \      /  \
dummy -> 4->5->6->7 -> NULL    prev moves from left to right (next level)
注意:
  • prev = dummy 和接下来的 prev.next = curr.left or curr.right 使 dummy停留在next level的开头,然后用 prev = prev.next 将 prev 从左向右移动。
  • connect完一行(next level)后,调用 connect(dummy.next) 进入下一行(记得此时 dummy.next 为next level的开头)。

public void connect(TreeLinkNode root) {    if (root == null)   return;    // dummy is the node above curr    // dummy.next stores the leftmost node in the next level    TreeLinkNode dummy = new TreeLinkNode(0);    TreeLinkNode prev = dummy, curr = root;    while (curr != null) {        // when curr has any child:        // if it's the leftmost node, connect dummy.next to it         // otherwise. connect previous left node to it        if (curr.left != null) {            prev.next = curr.left;            prev = prev.next;        }        if (curr.right != null) {            prev.next = curr.right;            prev = prev.next;        }        curr = curr.next;    }    connect(dummy.next);    // go down to the next level}
 楼主| oio14644 发表于 2015-8-7 13:10:45 | 显示全部楼层
public void connect(TreeLinkNode root) {
    if (root == null)   return;
    // dummy is the node above curr
    // dummy.next stores the leftmost node in the next level
    TreeLinkNode dummy = new TreeLinkNode(0);
    TreeLinkNode prev = dummy, curr = root;
    while (curr != null) {
        // when curr has any child:
        // if it's the leftmost node, connect dummy.next to it
        // otherwise. connect previous left node to it
        if (curr.left != null) {
            prev.next = curr.left;
            prev = prev.next;
        }
        if (curr.right != null) {
            prev.next = curr.right;
            prev = prev.next;
        }
        curr = curr.next;
    }
    connect(dummy.next);    // go down to the next level
}
回复 支持 反对

使用道具 举报

全球28万学生4.7分推荐

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2018-5-22 08:49

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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