美文网首页剑指offer-python
把二叉树打印成多层[层次搜索]、以及之字形打印

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

作者: 小歪与大白兔 | 来源:发表于2018-08-28 15:32 被阅读0次

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

# -*- 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

相关文章

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

    题目一:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 题目二:请实现一个函数按照之字形打印二叉...

  • 剑指第三周

    对称的二叉树 其实就是要遍历嘛 按之字形顺序打印二叉树 同样是简单的层次遍历 把二叉树打印成多行 这个更简单了 栈...

  • 剑指offer | 把二叉树打印成多行

    把二叉树打印成多行 从上到下按层打印成多行 分析:使用队列

  • JZ-059-按之字形顺序打印二叉树

    按之字形顺序打印二叉树 题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从...

  • 打印二叉树

    按之字形顺序打印二叉树 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺...

  • [剑指offer]刷题笔记

    按之字顺序打印二叉树 把二叉树打印成多行 按之字顺序打印二叉树【树】【常考!!!】 题目描述:请实现一个函数按照之...

  • 二叉树的遍历

    从上往下打印二叉树 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 按之字形顺序打印二叉树 请实现一个函数...

  • JZ-060-把二叉树打印成多行

    把二叉树打印成多行 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。题目链接: 把二叉树...

  • 数据结构算法(八) 之 树的 2 道面试题 60 & 6

    剑指 Offer 面试题 60(Java 版):把二叉树打印成多行 题目:从上到下按层打印二叉树,同一层的结点按从...

  • 从上往下打印二叉树

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 思路 使用宽度优先搜索层次遍历整个二叉树。利用队...

网友评论

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

    本文链接:https://www.haomeiwen.com/subject/kcqqwftx.html