题解 | #按之字形顺序打印二叉树#

按之字形顺序打印二叉树

http://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0

暴力就完事了

#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param pRoot TreeNode类 
# @return int整型二维数组
#
class Solution:
    def Print(self , pRoot: TreeNode) -> List[List[int]]:
        if pRoot==None:
            return []
        line=0#当前操作行的行号
        stack=[]#栈 后入先出队列
        queue=[pRoot]#队列 先入先出队列
        valQueue=[pRoot.val]
        result=[valQueue.copy()]
        while len(queue)>0:
            valQueue.clear()
            if line==0:
                #首次进行运算
                if queue[0].right!=None:
                    queue.append(queue[0].right)
                    valQueue.append(queue[0].right.val)
                if queue[0].left!=None:
                    queue.append(queue[0].left)
                    valQueue.append(queue[0].left.val)
                queue.pop(0)#删除第一个
                
                if len(valQueue)>0:
                    result.append(valQueue.copy())
                
                line+=1
            elif line%2!=0:#操作奇数行
                '''
                方向由左向右,
                此时应由左向右将子节点入栈
                先左后右
                '''
                while len(queue)>0:
                    if queue[0].right!=None: 
                        stack.append(queue[0].right)
                    if queue[0].left!=None:
                        stack.append(queue[0].left)
                    queue.pop(0)
                while len(stack)>0:
                    valQueue.append(stack[-1].val)
                    queue.append(stack.pop(-1))#将栈中元素放入队列
                if len(valQueue)>0:
                    result.append(valQueue.copy())
                
                line+=1
            else:
                
                #操作偶数行
                '''
                方向由右向左
                先右后左
                '''  
                while len(queue)>0:
                    if queue[0].left!=None:
                        stack.append(queue[0].left)
                    if queue[0].right!=None:
                        stack.append(queue[0].right)
                    queue.pop(0)
                while len(stack)>0:
                    valQueue.append(stack[-1].val)
                    queue.append(stack.pop(-1))#将栈中元素放入队列
                if len(valQueue)>0:
                    result.append(valQueue.copy())
                
                line+=1                    
        return result
                
                
        # write code here
        
        
        
全部评论

相关推荐

鼠鼠第一次实习,啥也不懂一直是自己一个人吃的饭,不会做工作老是被嫌弃,大人的世界是这样的吗?
我是星星我会发亮:好的mt有两种,一种愿意教你的,一种几乎什么活都不给你派让你很闲允许你做自己事情的
实习吐槽大会
点赞 评论 收藏
分享
门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
今天 18:35
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务