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

按之字形顺序打印二叉树

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

相关推荐

ohs的小木屋:比不少实习待遇高了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 10:56
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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