103. 二叉树的锯齿形层次遍历

在这里插入图片描述

分析
接着上一题的思路

  • 我们用队列q遍历树的节点 顺序永远是 从左往右 从上往下
  • 定义一个 l2r 记录当前层我们应该 从左往右 还是 从右往左
    • 当 从左往右 时,order添加当前node的val到队尾
    • 当 从右往左 时,order添加当前node的val到队首
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
        
        result = list()
        if not root:
            return []
        
        # 队列
        q = list()
        q.append(root)
        
        # 定义 从左往右 还是 从右往左 的bool值
        l2r = 1
        
        while q:
            
            # 该层节点val列表
            order = list()
            # 该层节点个数
            n = len(q)
            
            if l2r:
                for i in range(n):
                    node = q.pop(0)
                    # 添加到队尾
                    order.append(node.val)
                    
                    if node.left:
                        q.append(node.left)
                    if node.right:
                        q.append(node.right)
                        
            else:
                for i in range(n):
                    node = q.pop(0)
                    # 添加到队首
                    order.insert(0, node.val)
                    
                    if node.left:
                        q.append(node.left)
                    if node.right:
                        q.append(node.right)
            
            result.append(order[:])
            # 更改 l2r
            l2r = l2r ^ 1
            
        return result
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值