首页 > 其他 > 详细

栈和队列_leetcode102

时间:2019-03-17 16:17:25      阅读:141      评论:0      收藏:0      [点我收藏+]
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None

class Solution(object):
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""

res = []

if not root :
return res

queue = []

queue.append(root)

while queue:
node = queue.pop()

res.append(node.val)

if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)

return res





class Solution2(object):
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""

res = []

if not root :
return res

queue = []

level = 0
pair = (root,level)
queue.append(pair)

while queue:
pair = queue.pop()

if len(res) == pair[1]:
res.append([])
res[pair[1]].append(pair[0].val)

if pair[0].right:
queue.append((pair[0].right,pair[1]+1))
if pair[0].left:
queue.append((pair[0].left,pair[1]+1))



return res



# 队列中新进的节点都是同一层的节点
class Solution3(object):
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""

res = []

if not root :
return res

queue = []
queue.append(root)

while queue:
level = []

for i in range(len(queue)): # 这段代码写的不好 20100304
node = queue.pop(0)
level.append(node.val)

if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)

res.append(level)
return res

# 修改版
class Solution32(object):
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""

res = []

if not root :
return res

queue = []
queue.append(root)

while queue:

level = []
length = len(queue)
for i in range(length): # 这样改的就比较清楚了
node = queue.pop(0)
level.append(node.val)

if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)

res.append(level)
return res

class Solution4(object):
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""

res = []

self.level(root,0,res)

return res

def level(self,node,lev,res):
if not node:
return

if len(res) == lev:
res.append([])

res[lev].append(node.val)

self.level(node.left,lev+1,res)
self.level(node.right,lev+1,res)

栈和队列_leetcode102

原文:https://www.cnblogs.com/lux-ace/p/10547334.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!