剑指offer 二叉树的层序遍历

剑指offer 牛客网 二叉树的层序遍历

# -*- coding: utf-8 -*-
"""
Created on Tue Apr  9 09:33:16 2019

@author: Administrator
层序遍历:从上往下打印出二叉树的每个节点,同层节点从左至右打印。
            1
           /  
          2    3
         /   / 
        4  5 6   7
返回列表:[1,2,3,4,5,6,7]
"""

# -*- coding:utf-8 -*-
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None
class Solution:
    #层序遍历
    def PrintFromTopToBottom(self, root):
        # write code here
        res,result = [],[]
        if root:    #非空节点,若空直接返回空
            res.append(root)    #先将头结点加入其中
            i = 0
            while True:
                if res[i].left:     #如果左节点非空将其加入
                    res.append(res[i].left)
                if res[i].right:    #同理,右节点非空将其加入
                    res.append(res[i].right)
                i += 1
                if i == len(res):   #退出条件是当遍历到列表的长度时候退出
                    break
            for i in res:   #将节点的值加入到列表返回
                if i:   #返回非空节点的值
                    result.append(i.val)
        return result
        
if __name__ == '__main__':
    solution = Solution()
    node_left = TreeNode(4)
    node_right = TreeNode(5)
    root_left = TreeNode(2)
    root_left.left = node_left
    root_left.right = node_right
    
    node_left = TreeNode(6)
    node_right = TreeNode(7)
    root_right = TreeNode(3)
    root_right.left = node_left
    root_right.right = node_right
    
    root = TreeNode(1)
    root.left = root_left
    root.right = root_right

    res = solution.PrintFromTopToBottom(root)
    print(res)
原文地址:https://www.cnblogs.com/missidiot/p/10675215.html