Category Archives: 学习

LeetCode: Populating Next Right Pointers in Each Node II constant O(1)空间解法

原题地址为:http://oj.leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/
内容如下:

Follow up for problem “Populating Next Right Pointers in Each Node“.

What if the given tree could be any binary tree? Would your previous solution still work?

Note:

  • You may only use constant extra space.

 

For example,
Given the following binary tree,

         1
       /  
      2    3
     /     
    4   5    7

 

After calling your function, the tree should look like:

         1 -> NULL
       /  
      2 -> 3 -> NULL
     /     
    4-> 5 -> 7 -> NULL

题目简而言之就是要按层遍历二叉树,然后加上指向同一层下一个节点的引用。本来没有什么难度,但是题目中常数空间的要求把这题的做法限制的死死的:不能额外建立一个队列,不能用递归。

这个题目最tricky的地方就是当我遍历某一层的时候,已经遍历过并建好链表的上一层本质上就是一个队列!我们只要保存好当前一层的起点,当这一层遍历完成开始遍历下一层的时候,利用这个起点构成的链表进行按层遍历即可。

为什么在Safari中调试时,console.log()会显示undefined?

在Safari中对iPad设备上的网页进行Debug的时候,使用console.log()命令往往会显示undefined,如下图所示。

这是为什么呢?其实我们只要在桌面版Safari中对普通网页进行Debug就知道了。

还是有一个undefined的输出,但是console.log()的结果已经打印出来了。
这个undefined其实是console.log()函数的返回值,而在桌面版Safari上对普通网页进行调试的时候,由于Debug输出就在当前浏览器中,所以调试信息能够正确的打印出来,而对iPad进行远程Debug的时候,调试信息其实是输出到了iPad上Safari的console里面去了,所以在桌面Safari中看不到Debug的输出信息。

那么怎么进行调试呢?其实非常简单,undefined是console.log()的返回值,说明console永远都会打印命令的返回值,我们只要简单的输入变量的名字,就能看变量的值了。