lintcode练习-69. 二叉树的层次遍历

描述

给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)

您在真实的面试中是否遇到过这个题?  

样例

给一棵二叉树 {3,9,20,#,#,15,7} 

  3
 / \
9  20
  /  \
 15   7

返回他的分层遍历结果:

[
  [3],
  [9,20],
  [15,7]
]

挑战

挑战1:只使用一个队列去实现它

挑战2:用DFS算法来做


实现代码:

# Definition of TreeNode:
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left, self.right = None, None


#方法一 非递归
class Solution:
    """
    @param root: A Tree
    @return: Level order a list of lists of integer
    """
    def levelOrder(self, root):
        # write your code here
        self.results = []
        if not root:
            return self.results
        q = [root]
        while q:
            new_q = []
            self.results.append([n.val for n in q])
            for node in q:
                if node.left:
                    new_q.append(node.left)
                if node.right:
                    new_q.append(node.right)
            q = new_q
        return self.results

#方法二  DFS
class Solution:
    """
    @param root: A Tree
    @return: Level order a list of lists of integer
    """
    def levelOrder(self, root):
        # write your code here
        self.results = []
        if not root:
            return self.results
        thisLevel = 0
        self.DFS(root, thisLevel)
        return self.results

    def DFS(self, root, thisLevel):
        if root is None:
            return
        if thisLevel > len(self.results) -1:
            self.results.append([])
        self.results[thisLevel].append(root.val)
        thisLevel += 1
        self.DFS(root.left, thisLevel)
        self.DFS(root.right, thisLevel)
        return

猜你喜欢

转载自blog.csdn.net/qq_36387683/article/details/80960140