码迷,mamicode.com
首页 > 其他好文 > 详细

剑指Offer 22. 从上往下打印二叉树 (二叉树)

时间:2018-10-15 14:36:46      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:pytho   rank   pre   nod   return   node   init   result   所有结点   

题目描述

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

题目地址

https://www.nowcoder.com/practice/7fe2212963db4790b57431d9ed259701?tpId=13&tqId=11175&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

思路

使用队列

技术分享图片

因为按层打印的顺序决定应该先打印根结点,所以我们从树的根结点8开始分析。为了接下来能够打印值为8的两个子结点,我们应该遍历该结点时把值为6和10的两个结点保存到一个容器里,现在容器内就有两个结点了。按照从左到右打印的要求,我们先取出为6的结点。打印出值6之后把它的值分别为5和7的两个结点放入数据容器。此时数据容器中有三个结点,值为10,5和7。接下来我们从容器中取出值为10的结点,注意到值为10的结点比值为5,7的结点先放入容器,此时又比这两个结点先取出,同时将9和11放入数据容器,这就是我们通常说的先入先出,因此数据容器为一个队列。由于值为5,7,9,11的结点都没有子结点,因此只要依次打印即可。

技术分享图片

通过例子,我们找到从上到下打印二叉树的规律:每一次打印一个结点的时候,如果该结点有子结点,则把该结点的左右结点依次放到一个队列的末尾。接下来到队列的头部取出最早进入队列的结点,重复前面的打印操作,直到队列中所有结点都打印出来为止。

Python

# -*- coding:utf-8 -*-
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None
node1 = TreeNode(8)
node2 = TreeNode(6)
node3 = TreeNode(10)
node4 = TreeNode(5)
node5 = TreeNode(7)
node6 = TreeNode(9)
node7 = TreeNode(11)
node1.left = node2
node1.right = node3
node2.left = node4
node2.right = node5
node3.left = node6
node3.right = node7

class Solution:
    # 返回从上到下每个节点值列表,例:[1,2,3]
    def PrintFromTopToBottom(self, root):
        # write code here
        ans = []
        if not root:
            return ans
        queue = []
        queue.append(root)
        while queue:
            cur = queue.pop(0)
            ans.append(cur.val)
            if cur.left:
                queue.append(cur.left)
            if cur.right:
                queue.append(cur.right)
        return ans

if __name__ == __main__:
    result = Solution().PrintFromTopToBottom(node1)
    print(result)

剑指Offer 22. 从上往下打印二叉树 (二叉树)

标签:pytho   rank   pre   nod   return   node   init   result   所有结点   

原文地址:https://www.cnblogs.com/huangqiancun/p/9789961.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!