您当前的位置: 首页 >  Python

Better Bench

暂无认证

  • 0浏览

    0关注

    695博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III

Better Bench 发布时间:2022-10-03 22:01:11 ,浏览量:0

1 题目

请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。

例如: 给定二叉树: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回其层次遍历结果:

[ [3],[20,9],[15,7]]

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2 解析

思路和【剑指 Offer 32 - II. 从上到下打印二叉树 II】一样,区别在此基础上,只改进一点,奇数层列表是正序,偶数层列表是反序。

3 python实现

(1)写法一

    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        if not root: return []
        from collections import deque
        res,queue = [],deque()
        queue.append(root)    
        count = 1 
        while queue:
            level_list = []
            for _ in range(len(queue)):
            
                node = queue.popleft()
                level_list.append(node.val)
                if node.left:queue.append(node.left)
                if node.right:queue.append(node.right)
            if count%2==0:
                res.append(level_list[::-1])
            else:
                res.append(level_list)
            count+=1
        return res

(2)写法二,用列表来替代双相队列dqueue

def levelOrder(self, root: TreeNode) -> List[List[int]]:
    if not root: return []
	res,queue = [],[root,]  
	count = 1 
	while queue:
	    level_list = []
	    for _ in range(len(queue)):
	        node = queue.pop(0)
	        level_list.append(node.val)
	        if node.left:queue.append(node.left)
	        if node.right:queue.append(node.right)
	        if count%2==0:
	            res.append(level_list[::-1])
	        else:
	            res.append(level_list)
	            count+=1
	            return res

关注
打赏
1665674626
查看更多评论
立即登录/注册

微信扫码登录

0.0394s