剑指Offer 22. 从上往下打印二叉树 (二叉树)
Posted huangqiancun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer 22. 从上往下打印二叉树 (二叉树)相关的知识,希望对你有一定的参考价值。
题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
题目地址
思路
使用队列
因为按层打印的顺序决定应该先打印根结点,所以我们从树的根结点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. 从上往下打印二叉树 (二叉树)的主要内容,如果未能解决你的问题,请参考以下文章