牛客网-Python-按之字形顺序打印二叉树+二叉树输出多行

题目描述

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

题目描述

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

思路(1

自己完成的哦😯

层次遍历,遍历的时候将层数加在队列里。

出队列以层为键值加在字典里。

字典按键排序。(感觉可以直接用列表诶。。。)

感觉这种方法还挺好的,不想改了。。。

代码(1

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def Print(self, pRoot):
        # write code here
        resdic = {}
        quene = [(pRoot,1)]
        count = 1
        #层次遍历
        while(quene):
            root,count = quene.pop(0)
            if root==None:
                continue
            if count in resdic:
                resdic[count].append(root.val)
            else:
                resdic[count] = [root.val]
            count += 1
            quene.append((root.left,count))
            quene.append((root.right,count))
        resdic = sorted(resdic.items(),key=lambda x:x[0])
        result = []
        for res in resdic:
            if res[0]%2==1:
                result.append(res[1])
            else:
                result.append(res[1][-1::-1])
        return result

 代码(2

#     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
        quene = [(pRoot,1)]
        result = []
        while(quene):
            root,count = quene.pop(0)
            if root==None:
                continue
            if len(result)<count:
                result.append([root.val])
            else:
                result[count-1].append(root.val)
            quene.append((root.left,count+1))
            quene.append((root.right,count+1))
        return result

 

posted @ 2020-02-12 15:40  ditingz  阅读(342)  评论(0编辑  收藏  举报