JAVA学习-练习试用Java实现“二叉树的层序遍历 II”

news/2024/12/22 1:22:14/

问题:


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

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

3
/ \
9  20
/  \
15   7
返回其自底向上的层序遍历为:

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

解答思路:

一、题目分析:本题要求对二叉树进行层序遍历,并将结果以自底向上的顺序返回。

二、主要思路:
1. 使用队列来实现层序遍历。
2. 从根节点开始,将其入队。
3. 进入循环,每次取出队列头部的节点,并将其值加入当前层的结果列表中。
4. 如果该节点有左右子节点,将它们入队。
5. 循环结束后,将当前层的结果列表添加到最终结果列表的头部。
6. 重复上述步骤,直到队列为空。

三、以下是修改后的 Java 代码:

java">import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;public class BinaryTreeLevelOrderTraversalII {public List<List<Integer>> levelOrderBottom(TreeNode root) {List<List<Integer>> result = new ArrayList<>();if (root == null) {return result;}Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);while (!queue.isEmpty()) {int size = queue.size();List<Integer> level = new ArrayList<>();for (int i = 0; i < size; i++) {TreeNode current = queue.poll();level.add(current.val);if (current.left!= null) {queue.offer(current.left);}if (current.right!= null) {queue.offer(current.right);}}result.add(0, level);}return result;}public static void main(String[] args) {// 构建二叉树TreeNode root = new TreeNode(3);root.left = new TreeNode(9);root.right = new TreeNode(20);root.right.left = new TreeNode(15);root.right.right = new TreeNode(7);BinaryTreeLevelOrderTraversalII solution = new BinaryTreeLevelOrderTraversalII();List<List<Integer>> result = solution.levelOrderBottom(root);// 打印结果for (List<Integer> level : result) {System.out.println(level);}}
}class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int val) {this.val = val;}
}


(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)


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

相关文章

微服务实战——平台属性

平台属性 中间表复杂业务 /*** 获取分类规格参数&#xff08;模糊查询&#xff09;** param params* param catelogId* param type type"base"时查询基础属性&#xff0c;type"sale"时查询销售属性* return*/ Override public PageUtils listByCatelogId…

使用 Wireshark 抓取类似的 HTTP 请求包

要使用 Wireshark 抓取类似的 HTTP 请求包&#xff0c;可以按照以下步骤进行操作&#xff1a; 安装并启动 Wireshark 如果你还没有安装 Wireshark&#xff0c;可以从Wireshark 官方网站下载并安装它。 安装完成后&#xff0c;启动 Wireshark。选择网络接口 在 Wireshark 主界面…

深度学习:DCGAN

目录 什么是DCGAN DCGAN与GAN的区别 DCGAN生成器 DCGAN判别器 基于MindSpore框架实现DCGAN 数据集&#xff1a; 变量定义&#xff1a; 数据预处理&#xff1a; 生成器&#xff1a; 判别器&#xff1a; 损失函数与优化器 训练模型 模型推理 什么是DCGAN CDGAN&#…

Kafka和RabbitMQ区别

RabbitMQ的消息延迟是微秒级&#xff0c;Kafka是毫秒级&#xff08;1毫秒1000微秒&#xff09; 延迟消息是指生产者发送消息发送消息后&#xff0c;不能立刻被消费者消费&#xff0c;需要等待指定的时间后才可以被消费。 Kafka的单机呑吐量是十万级&#xff0c;RabbitMQ是万级…

安卓使用memtester进行内存压力测试

memteser简介 memtester 是一个用于测试内存可靠性的工具。 它可以对计算机的内存进行压力测试&#xff0c;以检测内存中的错误&#xff0c;例如位翻转、随机存取错误等。memtester 可以在不同的操作系统上运行&#xff0c;并且可以针对不同大小的内存进行测试。 下载源码 m…

408算法题leetcode--第24天

#378. 有序矩阵中第 K 小的元素 378. 有序矩阵中第 K 小的元素思路&#xff1a;值二分&#xff0c;如注释时间&#xff1a;O(log(r-l) * n)&#xff1b;空间&#xff1a;O(1) class Solution { public:int check(vector<vector<int>>& matrix, int target){/…

多用户网页聊天室(测试报告)

一、项目背景 随着现代互联网的快速发展&#xff0c;实时通信系统&#xff08;如聊天应用&#xff09;已成为人们日常交流的重要工具。多用户网页聊天室项目旨在为用户提供一个基于Web的实时聊天平台&#xff0c;支持用户之间的即时通信、好友管理和历史消息记录查看。为了提升…

C语言复习概要(二)

本文目录 C语言中的数组与函数详解1. 引言2. 数组2.1. 什么是数组&#xff1f;语法&#xff1a;示例&#xff1a; 2.2. 数组的初始化示例 1&#xff1a;在声明时初始化示例 2&#xff1a;部分初始化示例 3&#xff1a;运行时赋值 2.3. 数组的访问与修改示例&#xff1a; 2.4. 多…