LintCode 71. Binary Tree Zigzag Level Order Traversal

本文介绍了如何解决LintCode上的71题,即二叉树的锯齿形层次遍历。该问题要求在遍历二叉树时,偶数层的节点顺序从右到左,奇数层保持从左到右。解决方案利用了Python的deque,并通过跟踪层数i来判断何时反转当前层的节点顺序。提交的代码在效率上表现出色,超越了89.60%的参赛者提交的解决方案。
摘要由CSDN通过智能技术生成

题目描述:

给出一棵二叉树,返回其节点值的锯齿形层次遍历(先从左往右,下一层再从右往左,层与层之间交替进行)

分析:

此题和69. Binary Tree Level Order Traversal很像。只是需要在偶数层的时候,将此level的节点列表倒序。

需要用到python中的deque。71题代码如下:

from collections import deque
class Solution:
    def zigzagLevelOrder(self, root):
        # write your code here
        if root is None:
            return []
        else:
            que = deque([root])
            res = []
            i = 0
            while que:
                Node_perlevel = []
                i+=1
                for _ in range(len(que)):
                    node = que.popleft()
                    Node_perlevel.append(node.val)
                    if node.left:
                        que.append(node.left)
                    if node.right:
                        que.append(node.right)
                if i % 2 == 0:
                    Node_perlevel.reverse()
                    res.append(Node_perlevel)
                else:
                    res.append(Node_perlevel)
        
        return res

Your submission beats 89.60% Submissions!

可见算法效率还是不错的。

和69题code对比一下:

from collections import deque

class Solution:
    def levelOrder(self, root):
        if root is None:
            return []
        else:
            queue = deque([root])   
            res = []
            while queue:
                Node_perlevel = []   
                for _ in range(len(queue)):
                    node = queue.popleft()
                    Node_perlevel.append(node.val)
                    
                    if node.left:
                        queue.append(node.left)
                    if node.right:
                        queue.append(node.right)
                res.append(Node_perlevel)        
        return res

其实就是多了一个i的判断,i用来存储层数。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值