Level Order
题目列表
- level-order
- level-order 2
- zigzag
- populate next right pointers I & II
解题方法
Level order
- 用变量记录当前层和下一层的node数量
- 不用变量记录,每次记录当前queue的size,就是这一层的数量,然后从queue中 pop出相应数量的node,并且将它们的child加到queue中
populate next right pointers
- complete tree
not complete
level order的做法还是可以做的
- constant space的做法,每次用上一层的来处理下一层的next问题
利用queue
class Solution(object):
def connect(self, root):
"""
:type root: TreeLinkNode
:rtype: nothing
"""
if not root:
return
queue = deque()
queue.append(root)
while queue:
size = len(queue)
for i in range(size):
cur = queue.popleft()
if i == size - 1:
cur.next = None
else:
cur.next = queue[0]
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
O(1) space的做法
- 上一层的开头和指针,当前层的开头和指针
- 每次用上一层的指针移动,当前层的指针随之移动
- 在移动的过程中如果curHead还是None,说明还没有到下一层的开头
class Solution(object):
def connect(self, root):
"""
:type root: TreeLinkNode
:rtype: nothing
"""
if not root:
return
lastHead = root
lastCurrent = None
curHead = None
cur = None
while lastHead:
lastCurrent = lastHead
while lastCurrent:
if lastCurrent.left:
if curHead is None:
curHead = lastCurrent.left
cur = curHead
else:
cur.next = lastCurrent.left
cur = cur.next
if lastCurrent.right:
if curHead is None:
curHead = lastCurrent.right
cur = curHead
else:
cur.next = lastCurrent.right
cur = cur.next
lastCurrent = lastCurrent.next
lastHead = curHead
curHead = None