平平无奇根据队列来
def fun1(root):
'''
这个是利用队列来确定
将根节点入队列
1.删除节点
2.打印
3.将左节点,右节点入队列
不断重复
怎么确定到了另外一行
:param root:
:return:
'''
if not root:
return []
duilie = [root]
ls = []
while duilie: # 队列不为空进来
item = [] # 一行的数据
for i in range(len(duilie)): # 循环当前元素个数次
root = duilie.pop(0) # 删除队首元素
item.append(root.val)
if root.left:
duilie.append(root.left)
if root.right:
duilie.append(root.right)
ls.append(item)
return ls
这个虽然还是队列的思想,但因为不断删除元素耗费的空间大,所以没有删除元素,而是采用了ind作为队列的头,往后面走
那么循环结束的条件就是队列的头ind到了队列的最末尾,走不动路了
def fun2(root):
'''
我觉得每次让元素向前移动一位是很麻烦的,再加上我又不缺空间,所以就刨除删元素的部分
:param root:
:return:
'''
if not root:
return []
duilie = [root]
ind = 0
ls = []
while ind != len(duilie): #这里是重点,如果ind==len(duilie)意味着队列的头到了队列的末尾,无法再循环了
item = [] # 一行的数据
for i in range(len(duilie) - ind): # 循环当前元素个数次
root = duilie[ind] # 删除队首元素
item.append(root.val)
if root.left:
duilie.append(root.left)
if root.right:
duilie.append(root.right)
ind += 1
ls.append(item)
return ls