栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

LeetCode

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode

大家好!我是你们的好朋友,大数据老虾。相遇是缘,既然来了就拎着小板凳坐下来一起唠会儿,如果在文中有所收获,请别忘了一键三连,你的鼓励,是我创作的动力,废话不多说,直接开干 吧。

先别急着走,文末干货,记得拎着小板凳离开的时候也给它顺走藍

树-二叉树的层序遍历 ||

二叉树的层序遍历 ||

题目方法1:广度优先搜索

树的层次遍历可以使用广度优先搜索实现 Java实现代码复杂度分析Python实现代码文末彩蛋朗

二叉树的层序遍历 || 题目

给出二叉树的根节点root,返回其节点值自底向上的层序遍历。(即按从叶子节点所在的层到根节点所在的层,逐层从左向右遍历)

示例1:

input:root = [3, 9, 20, null, null, 15, 7]
output:[[15, 7], [9, 20, [3]]]

示例2:

input:root = [1]
output:[[1]]

示例3:

input:root = []
output:[]
方法1:广度优先搜索

解析:

1、二叉搜索的层序遍历 | 中,要求从上到下出书每一层的节点值

2、二叉树的层序遍历 || 中,要求从下到上输出每一层的节点值

PS:仅仅输出顺序不同

树的层次遍历可以使用广度优先搜索实现

1、从根节点开始搜索,每次遍历同一层的全部节点,使用一个列表存储该层的节点值。

2、如果要求从上到下输出每一层的节点值,做法是很直观的,在遍历完一层节点之后,将存储该层节点值的列表添加到结果列表的尾部。

3、为了降低在结果列表的头部添加一层节点值的列表的时间复杂度,结果列表可以使用链表的结构,在链表头部添加一层节点值的列表的时间复杂度是 O(1)。

4、在 Java 中,由于需要返回的 List 是一个接口,这里可以使用链表实现;而 C++ 或 Python 中,需要返回一个 vector 或 list,它不方便在头部插入元素(会增加时间开销),所以可以先用尾部插入的方法得到从上到下的层次遍历列表,然后再进行反转。

Java实现代码
class Solution {
    public List> levelOrderBottom(TreeNode root) {
        List> levelOrder = new linkedList>();
        if (root == null) {
            return levelOrder;
        }
        Queue queue = new linkedList();
        queue.offer(root);
        while (!queue.isEmpty()) {
            List level = new ArrayList();
            int size = queue.size();
            for (int i = 0; i < size; i++) {
                TreeNode node = queue.poll();
                level.add(node.val);
                TreeNode left = node.left, right = node.right;
                if (left != null) {
                    queue.offer(left);
                }
                if (right != null) {
                    queue.offer(right);
                }
            }
            levelOrder.add(0, level);
        }
        return levelOrder;
    }
}

public class TreeNode {
     int val;
     TreeNode left;
     TreeNode right;
     TreeNode() {}
     TreeNode(int val) { this.val = val; }
     TreeNode(int val, TreeNode left, TreeNode right) {
          this.val = val;
          this.left = left;
          this.right = right;
     }
 }
复杂度分析

时间复杂度:O(n),其中 n 是二叉树中的节点个数。每个节点访问一次,结果列表使用链表的结构时,在结果列表头部添加一层节点值的列表的时间复杂度是 O(1),因此总时间复杂度是 O(n)。

空间复杂度:O(n),其中 n 是二叉树中的节点个数。空间复杂度取决于队列开销,队列中的节点个数不会超过 n。

Python实现代码
class Solution:
    def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:
        levelOrder = list()
        if not root:
            return levelOrder
        
        q = collections.deque([root])
        while q:
            level = list()
            size = len(q)
            for _ in range(size):
                node = q.popleft()
                level.append(node.val)
                if node.left:
                    q.append(node.left)
                if node.right:
                    q.append(node.right)
            levelOrder.append(level)

        return levelOrder[::-1]

class TreeNode:
	def __init__(self, val=0, left=None, right=None):
		self.val = val
		self.left = left
		self.right = right
文末彩蛋朗

找资料很累吧,别急客官,俺统统安排上。程序员不可缺少的书籍,程序员经典名言:"收藏了就等于学会啦"
图灵程序丛书300+
Linux实战100讲
Linux书籍
计算机基础硬核总结
计算机基础相关书籍
操作系统硬核总结
Java自学宝典
Java学习资料
Java硬核资料
Java面试必备
Java面试深度剖析
阿里巴巴Java开发手册
MySQL入门资料
MySQL进阶资料
深入浅出的SQL
Go语言书籍
我的个人仓库:私人仓库

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/769285.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号