(树) 剑指 Offer 32 - I. 从上到下打印二叉树 ——【Leetcode每日一题】

news/2025/2/15 5:43:42/

❓剑指 Offer 32 - I. 从上到下打印二叉树

难度:中等

从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。

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

    3/ \9  20/  \15   7

返回:

[3,9,20,15,7]

提示

  • 节点总数 <= 100

💡思路:BFS

  • 使用优先队列进行层序遍历即可!

🍁代码:(C++、Java)

C++

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:vector<int> levelOrder(TreeNode* root) {vector<int> ans;if(root == nullptr) return ans;queue<TreeNode*> q;q.push(root);while(!q.empty()){TreeNode* temp = q.front();q.pop();ans.push_back(temp->val);if(temp->left != nullptr) q.push(temp->left);if(temp->right != nullptr) q.push(temp->right);}return ans;}
};

Java

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
class Solution {public int[] levelOrder(TreeNode root) {ArrayList<Integer> ans = new ArrayList<>();if(root == null) return new int[0];Queue<TreeNode> q = new LinkedList<>();q.add(root);while(!q.isEmpty()){TreeNode temp = q.poll();ans.add(temp.val);if(temp.left != null) q.add(temp.left);if(temp.right != null) q.add(temp.right);}int[] ret = new int[ans.size()];for(int i = 0; i < ans.size(); i++){ret[i] = ans.get(i);}return ret;}
}

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( n ) O(n) O(n),其中 n 为根为 root 的节点数。
  • 空间复杂度 O ( n ) O(n) O(n)

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!

注: 如有不足,欢迎指正!


http://www.ppmy.cn/news/994139.html

相关文章

Mybatis-plus的批量插入真的不能用吗?

目录 &#x1f9e8;一、前言 &#x1f9e8;二、走进源码 1.进入 saveBatch 看下 2.往里ServiceImpl#saveBatch走 3.SqlHelper#executeBatch(Class, Log, Collection, int, BiConsumer),e> 4.SqlHelper#executeBatch(Class entityClass, Log log, Consumer consumer) …

C++第三大特性:多态(1)

目录 一.多态的含义 1.普通调用&#xff1a; 2.多态调用 重写函数&#xff1a; 实现多态调用的三个条件&#xff1a;&#xff08;缺一不可&#xff09; 情况1&#xff1a;当只有父类中存在虚函数&#xff0c;两个子类都没有virtual形成的虚函数时&#xff0c;也能形成多态&…

数据库优化(数据库自身的优化,数据库表优化,程序操作优化)

数据库优化(数据库自身的优化,数据库表优化,程序操作优化) 一、增加次数据文件,设置文件自动增长(粗略数据分区) 1. 增加次数据文件 从SQL SERVER 2005开始,数据库不默认生成NDF数据文件,一般情况下有一个主数据文件(MDF)就够了,但是有些大型的数据库,由于信息很…

4-Linux组管理和权限管理

Linux组管理和权限管理 Linux组的基本介绍文件/目录的所有者组的创建文件/目录所在的组其它组改变用户所在的组权限的基本介绍第0-9位说明rwx权限详解rwx 修饰文件时rwx修饰目录时 修改权限第一种方式&#xff1a;、-、 变更权限第二种方式&#xff1a;通过数字变更权限 修改文…

配置IPv6 over IPv4手动隧道示例

组网需求 如图1所示&#xff0c;两台IPv6主机分别通过SwitchA和SwitchC与IPv4骨干网络连接&#xff0c;客户希望两台IPv6主机能通过IPv4骨干网互通。 图1 配置IPv6 over IPv4手动隧道组网图 配置思路 配置IPv6 over IPv4手动隧道的思路如下&#xff1a; 配置IPv4网络。配置接…

JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)

目录 一、封装 1.封装&#xff1a;从语法来看&#xff0c;就是被private修饰的成员变量或者成员方法。只能在当前类当中使用。 2.快捷键&#xff0c;自动生成set或者get方法 3.限定访问修饰符&#xff08;private、 protected、public&#xff09; public&#xff1a;可以理…

Spring框架中的Bean的各种加载方式

大家好&#xff0c;这里向大家主要介绍Spring框架以及SpringBoot框架中的Bean的各种加载方式&#xff0c;有时候我们的学习&#xff0c;就是单纯为了工作效率而作为工具使用&#xff0c;于是乎&#xff0c;往往忽略了其最重要的一点&#xff0c;那就是底层原理&#xff01;所以…

Java:Java程序通过执行系统命令调用Python脚本

本文实现功能&#xff1a;Java程序调用Python脚本 Python脚本 import sysdef add(x, y):return x yif __name__ "__main__":print(add(int(sys.argv[1]), int(sys.argv[2])))直接执行 $ python math.py 1 2 3Java程序调用Python脚本 package io.github.mouday.…