130、二叉树的之字形层序遍历

leetcode103
思路1:

  • 打算建立两个队列L1,L2,用BFS方法去搜索,
  • 当前列表设置为L1,然后搜索L1的节点,搜索一个就弹出一个,并把搜到的节点都添加到L2中
  • 搜索完L1以后,此时L1为空,L2代表的是下一层的节点。此时再把当前队列设置为L2,然后进行上面的循环。
  • 循环结束条件,两个list都为空时,说明循环就可以停止了。

思路2:

  • 为了使代码简单些,把读取下一行,把下一行节点插入队列,读取下一行节点的val步骤单独定义成一个函数。
  • 每次对新的一行进行搜索时,调用此函数即可,然后决定是否反转。
  • 循环结束条件:新的队列为空

代码:
注意用列表表示队列时,每次添加元素都是用insert方法。

# 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):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """

        def search_func(Q_para):
            Q_res = []
            L_res = []
            while Q_para:
                node = Q_para.pop()
                if node.left:
                    Q_res.insert(0,node.left)
                    L_res.append(node.left.val)
                if node.right:
                    Q_res.insert(0,node.right)
                    L_res.append(node.right.val)
            return Q_res,L_res
        if root:
            results = []
            Que = [root]
            L1 = [root.val]
            n = 0
            while Que:
                if n%2 == 0:
                    results.append(L1)
                else:
                    L1.reverse()
                    results.append(L1)
                Que,L1 = search_func(Que)
                n += 1
            return results
            
        else:
            return []
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 高四的生活(4) 涂乾追方嫄这件事,随着时间流逝,渐渐成为过去完成式。我与方嫄的关系随着频繁的接触,变得越来越微妙...
    秦唯径阅读 500评论 2 4
  • 上午一辆途观做保养建议车主更换火花塞并清洗积碳,车主也同意做了。在清洗积碳的过程是没有任何的问题,但当熄火后把清洗...
    天长地久盼三生阅读 188评论 0 0
  • 不管再忙碌的生活,总有闲下来的时候;再好的心态,也有疲惫的那一刻。 这两天的生活总的来说还是很充实的。但当我静下来...
    影筠阅读 317评论 0 5
  • 做人本来就不容易,做个好人更难,做个好男人(好女人)更是难上加难。 我一直很好奇:什么样的男人才称得上是好男人?为...
    七片蓝枫叶阅读 291评论 1 0

友情链接更多精彩内容