您现在的位置是:亿华云 > 人工智能
聊聊从上到下打印二叉树
亿华云2025-10-09 15:24:54【人工智能】6人已围观
简介Leetcode :I:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof II:htt
Leetcode :
I:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof II:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof III:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof“GitHub : https://github.com/nateshao/leetcode/blob/main/algo-notes/src/main/java/com/nateshao/sword_offer/topic_25_levelOrder/Solution.java
从上到下打印二叉树 I
“题目描述 :从上到下打印出二叉树的聊聊每个节点,同一层的从上叉树节点按照从左到右的顺序打印。例如:给定二叉树: [3,到下打印9,20,null,null,15,7],
3 / \ 9 20 / \ 15 7返回:
[3,9,20,15,7]提示:节点总数 <= 1000
解题思路:
题目要求的二叉树的 从上至下 打印(即按层打印),又称为二叉树的聊聊 广度优先搜索(BFS)。 BFS 通常借助 队列 的从上叉树先入先出特性来实现。算法流程:
特例处理: 当树的到下打印根节点为空,则直接返回空列表 [] ; 初始化: 打印结果列表 res = [] ,云服务器聊聊包含根节点的从上叉树队列 queue = [root] ; BFS 循环: 当队列 queue 为空时跳出; 出队: 队首元素出队,记为 node; 打印: 将 node.val 添加至列表 tmp 尾部; 添加子节点: 若 node 的到下打印左(右)子节点不为空,则将左(右)子节点加入队列 queue ; 返回值: 返回打印结果列表 res 即可。聊聊复杂度分析:
时间复杂度 O(N): N为二叉树的从上叉树节点数量,即 BFS 需循环 N次。到下打印 空间复杂度 O(N) :最差情况下,聊聊即当树为平衡二叉树时,从上叉树最多有 N/2 个树节点同时在 queue 中,到下打印使用 O(N) 大小的额外空间。 package com.nateshao.sword_offer.topic_25_levelOrder; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; /** * @date Created by 邵桐杰 on 2021/11/29 14:57 * @微信公众号 程序员千羽 * @个人网站 www.nateshao.cn * @博客 https://nateshao.gitee.io * @GitHub https://github.com/nateshao * @Gitee https://gitee.com/nateshao * Description: 从上到下打印二叉树 思路:利用队列(链表)辅助实现。亿华云计算 * * add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常 * remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常 * element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常 * offer 添加一个元素并返回true 如果队列已满,则返回false * poll 移除并返问队列头部的元素 如果队列为空,则返回null * peek 返回队列头部的元素 如果队列为空,则返回null * put 添加一个元素 如果队列满,则阻塞 * take 移除并返回队列头部的元素 如果队列为空,则阻塞 */ public class Solution { /** * 队列 * * @param root * @return */ public int[] levelOrder(TreeNode root) { if (root == null) return new int[0];//空树则返回空数组 ArrayList<Integer> list = new ArrayList<>();// 申请一个动态数组 ArrayList 动态添加节点值 Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root);// 根结点先入队 while (!queue.isEmpty()) { TreeNode node = queue.poll();// 取出当前队首元素 list.add(node.val); if (node.left != null) queue.offer(node.left);// 左子节点入队 if (node.right != null) queue.offer(node.right);// 右子节点入队 } // 将 ArrayList 转为 int数组并返回 int[] res = new int[list.size()]; for (int i = 0; i < res.length; i++) { res[i] = list.get(i); } return res; } /亿华云很赞哦!(469)
相关文章
- 2、根据用户基础选择访问提供程序。由于互联问题的存在,接入商的选择也非常重要,如果用户群主要在联通,尽量选择联通接入较好的接入商,如果用户群主要在电信,那么选择电信接入较好的接入商。如果用户组位于国家/地区,则选择更好的访问提供程序进行交互。
- 戴尔APEX帮助企业应对云蔓延威胁
- 步入AI新纪元:全新沃尔沃EX90 SUV基于NVIDIA DRIVE打造而成
- 戴尔全新UltraSharp系列高端显示器 采用IPS Black技术真实还原绚丽色彩
- ICANN 规章禁止转移已经被记录或者在60天前内转移的域名。
- 数据中心存储五大趋势
- 戴尔科技边缘计算解决方案,助力制造业企业实现智能转型
- 你应该知道的七个数据中心配置优秀实践
- 以上的就是为大家介绍的关于域名的详解
- 数据中心互连芯片的增长机会