zoukankan      html  css  js  c++  java
  • 栈和队列_leetcode102

    # 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)
  • 相关阅读:
    oracle 动态SQL
    Oracle 学习PL/SQL
    SQL优化原理
    JAVA环境配置
    Java接口
    Java数据类型、操作符、表达式
    C#-VS配置开发环境-摘
    Java版本
    网站构建
    Java 时间、字符串
  • 原文地址:https://www.cnblogs.com/lux-ace/p/10547334.html
Copyright © 2011-2022 走看看