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

按之字形顺序打印二叉树

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
        
        
        
全部评论

相关推荐

到我怀里来:教育背景不用写主修课程,还有你写班级排名是什么意思?咋不写寝室排名呢😂要写就写年纪排名。得了那么多奖结果项目经历什么技术细节都不写清楚,把技术细节写清楚,用了什么技术解决了什么问题,“用了python语言、用了SQL语言”,有这样写的?hr一看就知道你是包装的或者比赛的奖是混的,你什么技术细节都不懂。校内职务全删了,什么三好学生、文明寝室这些你写上去干嘛?重复的奖学金你写三次干嘛?自我评价写那么多干嘛?谁想看这些
点赞 评论 收藏
分享
2024-11-18 13:45
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务