简单实现
直接用一个队列来实现
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Queue:
def __init__(self):
self.list=[]
def putin(self,Node):
self.list.insert(0,Node)
def pushout(self):
return self.list.pop()
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
out=[]
q=Queue()
q.putin(root)
while q.list!=[]:
tmpNode=q.pushout()
out.append(tmpNode.val)
if tmpNode.left!=None:
q.putin(tmpNode.left)
if tmpNode.right!=None:
q.putin(tmpNode.right)
return out
题目有特殊的要求
每一层需要加中括号:
即这样的二叉树,输出的应该是这样的:
3
/ \
9 20
/ \
15 7
[
[3],
[9,20],
[15,7]
]
所以这里需要将原来的实现方法进行特殊的处理。
用双队列,双列表
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
out=[]
q1=Queue()
q2=Queue()
if root==None:
return out
q1.putin(root)
while q1.list!=[] or q2.list!=[]:
active=q1 if q1.list else q2
standby=q2 if active==q1 else q1
thisfloor=[]
while active.list!=[]:
tmpNode=active.pushout()
thisfloor.append(tmpNode.val)
if tmpNode.left!=None:
standby.putin(tmpNode.left)
if tmpNode.right!=None:
standby.putin(tmpNode.right)
out.append(thisfloor)
return out
这里注意如果少了
if root==None:
return out
那么这个当树为空树的时候,这个场景过不了。