按之字形顺序打印二叉树

题目描述

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

思路

最初的思路是利用宽度优先搜索,对树进行层次遍历。然后根据遍历的层次来控制每次输出的方向。比如奇数(假设从1开始)正向输出,偶数反向输出。
后续做了一点改进,省去了逆向输出这个操作。在层次遍历的时候,先判断当前是应该正向还是反向输出的层。如果是反向输出,那么把当前层的当前节点每次都插入到当前队列的最前面。这样可以保证,当遍历完这一层时,存在数组里的节点已经是逆向的。

代码

class Solution:
    def Print(self, pRoot):
        if pRoot is None:
            return []
        result = []
        q = [pRoot]
        flag = 1  #控制输出方向
        while q:
            current_level = []
            temp_result = []
            for node in q:
                if flag == 1:
                    temp_result.append(node.val)
                if flag == -1:
                    temp_result.insert(0,node.val) #把后续节点插入到起始部位
                if node.left is not None:
                    current_level.append(node.left)
                if node.right is not None:
                    current_level.append(node.right)
            result.append(temp_result)
            q = current_level
            flag = flag * -1 #反向
        return result
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容