把二叉树打印成多层[层次搜索]、以及之字形打印

题目一:
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    # 返回二维列表[[1,2],[4,5]]
    def Print(self, pRoot):
        # write code here
        #广度优先搜索(层次搜索)
        #用栈可以简单实现
        if pRoot is None:
            return []
        result = []#存储最终的输出结果
        currentstack = [pRoot] # 存储当前层入栈的节点
        while currentstack:
            res = []  #存储该层的结果
            nextstack = []  #存储下一层入栈的节点
            for i in currentstack:
                res.append(i.val)
                if i.left:
                    nextstack.append(i.left)
                if i.right:
                    nextstack.append(i.right)
            currentstack = nextstack
            result.append(res)
        return result

题目二:
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路:只需在上一题中新增一个time用来记录当前是奇数层还是偶数层即可;如果是偶数层,则将res中的元素反转:res.reverse()或者是res = res[::-1]

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    # 返回二维列表[[1,2],[4,5]]
    def Print(self, pRoot):
        # write code here
        #广度优先搜索(层次搜索)
        #用栈可以简单实现
        if pRoot is None:
            return []
        result = []#存储最终的输出结果
        currentstack = [pRoot] # 存储当前层入栈的节点
        time = 0
        while currentstack:
            res = []  #存储该层的结果
            nextstack = []  #存储下一层入栈的节点
            time += 1
            for i in currentstack:
                res.append(i.val)
                if i.left:
                    nextstack.append(i.left)
                if i.right:
                    nextstack.append(i.right)
            currentstack = nextstack
            if time % 2== 0:
                res.reverse()
            result.append(res)
        return result
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 数据结构和算法--二叉树的实现 几种二叉树 1、二叉树 和普通的树相比,二叉树有如下特点: 每个结点最多只有两棵子...
    sunhaiyu阅读 6,583评论 0 14
  • 前言 树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。一直以来,对于树的掌握都是模棱两可的状态,现在希望通...
    MrHorse1992阅读 354,314评论 51 536
  • 树 记录《剑指offer》中所有关于树的题目,以及LeetCode中的相似题目。 相关题目列表 题目 树是一种最常...
    wenmingxing阅读 1,458评论 2 13
  • 习惯github pages风格的请看我的另一篇博客 题目32:从上到下打印二叉树 不分行从上到下打印二叉树 分行...
    stoneyang94阅读 297评论 0 1
  • 《金刚狼3》这部电影不再是一部超级英雄爆米花片,变成了一部彻彻底底的英雄迟暮公路片。 金刚狼从X战警,变成了出租礼...
    舞者龚溢文阅读 382评论 0 0