牛客网-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