用时 :25min
主要思路是利用栈,和普通的层序遍历不同的是每次都把栈清空
var connect = function(root) {
if (!root) return null var stack = [root]
while(stack.length) {
var _stack = [...stack,null]
stack = []
var pre = _stack.shift()
while(_stack.length || pre) {
pre.left && stack.push(pre.left)
pre.right && stack.push(pre.right)
pre.next = _stack.shift()
pre = pre.next }
}
return root};很显然我使用的 On 的内存空间是不符合题目的常数空间的,考虑到每一层的链接可以依靠父节点,以链表的形式找到。如下代码
while(pre) {
var cur = pre
while(cur) {
cur.left.next = cur.right cur.right.next = cur.next.left cur = cur.next }
}剩下的需要考虑的有
- pre需要保存为最左边的节点,以便于后面以链表的形式进行连接
- 第一层的next为空
- 最后一层没有左右节点