思路一:
#这个思路还是很清楚的
class Solution(object):
def levelOrder(self, root):
if not root:return []
stack,queue,res,nCount=[root],[],[[root.val]],1
while stack:
temp=stack.pop(0)#保证从左边开始取结点
if temp.left:
stack.append(temp.left)#加结点 一个存储,一个中间转化
if temp.right:
stack.append(temp.right)
nCount-=1
if nCount==0:
queue=[x.val for x in stack]
res+=[queue] if queue else []
nCount=len(stack)
print(stack,res)
return res
图解代码运行过程:
思路二:
class Solution(object):
def levelOrder(self, root):
result = []
self.helper(root, 0, result)
return result
def helper(self, root, level, result):
if root is None:
return
if len(result) <= level:#这里相当于创建一个列表[],为存储下一层元素做准备
result.append([])
result[level].append(root.val)
print(result)
self.helper(root.left, level+1, result)#这里有层次改变即level+1
self.helper(root.right, level+1, result)
图解代码运行过程:
思路三:
#直接利用三个列表来做,作者思路很清楚,q:存储当前元素左右孩子,
#level:存储上次结点的值,这里不会索引越界,是因为没有删除元素,而是一直添加元素,
#这里遍历到上层的最后一个元素为止,尽管p中还有下层元素,也不会遍历
from collections import deque
class Solution(object):
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
q, result = deque(), []
if root:
q.append(root)
while len(q):
level = []
for _ in range(len(q)):
x = q.popleft()
level.append(x.val)
if x.left:
q.append(x.left)
if x.right:
q.append(x.right)
result.append(level)
print(result,level)
return result
座右铭:站在别人的思想上,看见自己的不足,传播错误的经验,愿君不重蹈覆辙。
由于受限于本人经验,难免不足,如有建议,欢迎留言交流。