• 栈和队列_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)
  • 相关阅读:
    第 6 章 Android SDK 版本与兼容
    第 5 章 第二个 activity
    第 4 章 Android 应用的调试
    第 3 章 Activity 的生命周期
    第 2 章 Android 与 MVC 设计模式
    第 1 章 Android 应用初体验
    ACM基础之线性结构:一刷 参考答案
    小马慢慢跑
    Ubuntu 利用 xinetd 限制 SSH 连接数
    C# 定制 Attribute 简单使用
  • 原文地址:https://www.cnblogs.com/lux-ace/p/10547334.html
Copyright © 2020-2023  润新知