树--05---二叉树--02---二叉搜索树(BST)遍历

发布时间:2026/8/25 7:44:56

树--05---二叉树--02---二叉搜索树(BST)遍历
文章目录二叉树(BST)基础遍历----深度优先1. 前序遍历前序遍历的API实现步骤用的jDK自带的队列 LinkedBlockingDeque代码测试2.中序遍历中序遍历是按照Key从小到大遍历,最为重要中序遍历的API实现步骤代码测试:3. 后序遍历遍历的API实现步骤代码测试:二叉树的层序遍历----广度优先层序遍历的API实现步骤代码实现:测试:二叉树(BST)基础遍历----深度优先很多情况下我们可能需要像遍历数组数组一样遍历树从而拿出树中存储的每一个元素由于树状结构和线性结构不一样它没有办法从头开始依次向后遍历所以存在如何遍历也就是按照什么样的搜索路径进行遍历的问题。我们把树简单的画作上图中的样子由一个根节点、一个左子树、一个右子树组成那么按照根节点什么时候被访问我们可以把二叉树的遍历分为以下三种方式前序遍历先访问根结点然后再访问左子树最后访问右子树中序遍历先访问左子树中间访问根节点最后访问右子树后序遍历先访问左子树再访问右子树最后访问根节点如果我们分别对下面的树使用三种遍历方式进行遍历得到的结果如下1. 前序遍历前序遍历的API实现步骤把当前结点的key放入到队列中;找到当前结点的左子树如果不为空递归遍历左子树找到当前结点的右子树如果不为空递归遍历右子树用的jDK自带的队列 LinkedBlockingDeque代码//获取整个树中所有的键publicQueueKeypreErgodic(){QueueKeykeysnewLinkedBlockingDeque();preErgodic(root,keys);returnkeys;}//获取指定树x的所有键并放到keys队列中privatevoidpreErgodic(Nodex,QueueKeykeys){if(xnull){return;}//把x结点的key放入到keys中keys.add(x.key);//递归遍历x结点的左子树if(x.left!null){preErgodic(x.left,keys);}//递归遍历x结点的右子树if(x.right!null){preErgodic(x.right,keys);}}测试Testpublicvoidtest01(){//创建树对象BinaryTreeString,StringtreenewBinaryTree();//往树中添加数据tree.put(E,5);tree.put(B,2);tree.put(G,7);tree.put(A,1);tree.put(D,4);tree.put(F,6);tree.put(H,8);tree.put(C,3);//遍历QueueStringkeystree.preErgodic();for(Stringkey:keys){Stringvaluetree.get(key);System.out.println(key----value);}}2.中序遍历中序遍历是按照Key从小到大遍历,最为重要中序遍历的API实现步骤找到当前结点的左子树如果不为空递归遍历左子树把当前结点的key放入到队列中;找到当前结点的右子树如果不为空递归遍历右子树代码//使用中序遍历获取树中所有的键publicQueueKeymidErgodic(){QueueKeykeysnewLinkedBlockingDeque();midErgodic(root,keys);returnkeys;}//使用中序遍历获取指定树x中所有的键并存放到key中privatevoidmidErgodic(Nodex,QueueKeykeys){if(xnull){return;}//先递归把左子树中的键放到keys中if(x.left!null){midErgodic(x.left,keys);}//把当前结点x的键放到keys中keys.add(x.key);//在递归把右子树中的键放到keys中if(x.right!null){midErgodic(x.right,keys);}}测试:Testpublicvoidtest02(){//创建树对象BinaryTreeString,StringtreenewBinaryTree();//往树中添加数据tree.put(E,5);tree.put(B,2);tree.put(G,7);tree.put(A,1);tree.put(D,4);tree.put(F,6);tree.put(H,8);tree.put(C,3);//遍历QueueStringkeystree.midErgodic();for(Stringkey:keys){Stringvaluetree.get(key);System.out.println(key----value);}}3. 后序遍历遍历的API实现步骤找到当前结点的左子树如果不为空递归遍历左子树找到当前结点的右子树如果不为空递归遍历右子树把当前结点的key放入到队列中;代码//使用后序遍历把整个树中所有的键返回publicQueueKeyafterErgodic(){QueueKeykeysnewLinkedBlockingDeque();afterErgodic(root,keys);returnkeys;}//使用后序遍历把指定树x中所有的键放入到keys中privatevoidafterErgodic(Nodex,QueueKeykeys){if(xnull){return;}//通过递归把左子树中所有的键放入到keys中if(x.left!null){afterErgodic(x.left,keys);}//通过递归把右子树中所有的键放入到keys中if(x.right!null){afterErgodic(x.right,keys);}//把x结点的键放入到keys中keys.add(x.key);}测试:Testpublicvoidtest03(){//创建树对象BinaryTreeString,StringtreenewBinaryTree();//往树中添加数据tree.put(E,5);tree.put(B,2);tree.put(G,7);tree.put(A,1);tree.put(D,4);tree.put(F,6);tree.put(H,8);tree.put(C,3);//遍历QueueStringkeystree.afterErgodic();for(Stringkey:keys){Stringvaluetree.get(key);System.out.println(key----value);}}二叉树的层序遍历----广度优先所谓的层序遍历就是从根节点第一层开始依次向下获取每一层所有结点的值有二叉树如下那么层序遍历的结果是EBGADFHC层序遍历的API实现步骤创建队列存储每一层的结点使用循环从队列中弹出一个结点获取当前结点的key如果当前结点的左子结点不为空则把左子结点放入到队列中如果当前结点的右子结点不为空则把右子结点放入到队列中代码实现://使用层序遍历获取整个树中所有的键publicQueueKeylayerErgodic(){//定义两个队列分别存储树中的键和树中的结点QueueKeykeysnewLinkedBlockingDeque();QueueNodenodesnewLinkedBlockingDeque();//默认往队列中放入根结点nodes.add(root);while(!nodes.isEmpty()){//从队列中弹出一个结点把key放入到keys中Nodennodes.poll();keys.add(n.key);//判断当前结点还有没有左子结点如果有则放入到nodes中if(n.left!null){nodes.add(n.left);}//判断当前结点还有没有右子结点如果有则放入到nodes中if(n.right!null){nodes.add(n.right);}}returnkeys;}测试:Testpublicvoidtest01(){//创建树对象BinaryTreeString,StringtreenewBinaryTree();//往树中添加数据tree.put(E,5);tree.put(B,2);tree.put(G,7);tree.put(A,1);tree.put(D,4);tree.put(F,6);tree.put(H,8);tree.put(C,3);//遍历QueueStringkeystree.layerErgodic();for(Stringkey:keys){Stringvaluetree.get(key);System.out.println(key----value);}}

相关新闻

STM32外部中断按键处理:从HAL库配置到状态机消抖实战

STM32外部中断按键处理:从HAL库配置到状态机消抖实战

2026/8/25 7:34:55

1. 项目概述:从轮询到中断,按键处理的效率革命在嵌入式开发里,按键检测是基础得不能再基础的功能,但恰恰是这个基础功能,最能体现一个开发者对系统资源利用的理解深度。很多新手,包括当年的我,都…

Kubernetes ReplicaSet 核心原理与实践:从副本控制到生产级部署

Kubernetes ReplicaSet 核心原理与实践:从副本控制到生产级部署

2026/8/25 7:34:55

1. 项目概述:为什么ReplicaSet是K8S的“定海神针”?在Kubernetes(K8S)的世界里,Pod是承载应用的最小可部署单元,但它生来脆弱。一个Pod随时可能因为节点故障、资源不足或人为误删而消失。想象一下&#xff…

Kubernetes ReplicaSet核心机制详解:从原理到实践,保障Pod高可用

Kubernetes ReplicaSet核心机制详解:从原理到实践,保障Pod高可用

2026/8/25 7:34:55

1. 项目概述:为什么我们需要ReplicaSet?在Kubernetes(K8S)的世界里,当你把一个应用容器化并部署到集群后,第一个要面对的现实问题就是:如何保证它始终运行?你可能会说,用…

缩放再也不跑飞:chartjs-plugin-zoom的limits与minRange三个必会技巧

缩放再也不跑飞:chartjs-plugin-zoom的limits与minRange三个必会技巧

2026/8/25 8:34:58

缩放再也不跑飞:chartjs-plugin-zoom的limits与minRange三个必会技巧 【免费下载链接】chartjs-plugin-zoom Zoom and pan plugin for Chart.js 项目地址: https://gitcode.com/gh_mirrors/ch/chartjs-plugin-zoom chartjs-plugin-zoom 是 Chart.js 的官方缩…

如何制作让移动端流畅运行的Web 3D游戏?ROYGBIV纹理压缩(ASTC/PVRTC/S3TC)完整指南

如何制作让移动端流畅运行的Web 3D游戏?ROYGBIV纹理压缩(ASTC/PVRTC/S3TC)完整指南

2026/8/25 8:34:58

如何制作让移动端流畅运行的Web 3D游戏?ROYGBIV纹理压缩(ASTC/PVRTC/S3TC)完整指南 【免费下载链接】ROYGBIV A 3D engine for the Web 项目地址: https://gitcode.com/gh_mirrors/ro/ROYGBIV ROYGBIV 是一款面向 Web 的 3D 游戏引擎&…

RoMa性能基准测试:4种3D旋转映射GPU速度对比,如何选出最快的实现方案?

RoMa性能基准测试:4种3D旋转映射GPU速度对比,如何选出最快的实现方案?

2026/8/25 8:34:58

RoMa性能基准测试:4种3D旋转映射GPU速度对比,如何选出最快的实现方案? 【免费下载链接】roma RoMa: A lightweight library to deal with 3D rotations in PyTorch. 项目地址: https://gitcode.com/gh_mirrors/roma1/roma RoMa 是 PyT…

Detecto骨干网络选型实战:ResNet-50 vs MobileNet-V3物体检测速度与精度对比

Detecto骨干网络选型实战:ResNet-50 vs MobileNet-V3物体检测速度与精度对比

2026/8/25 8:34:58

Detecto骨干网络选型实战:ResNet-50 vs MobileNet-V3物体检测速度与精度对比 【免费下载链接】detecto Build fully-functioning computer vision models with PyTorch 项目地址: https://gitcode.com/gh_mirrors/de/detecto Detecto 是一个基于 PyTorch 的 …

grunt-contrib-compass生产环境构建指南:outputStyle压缩与sourcemap配置避坑手册

grunt-contrib-compass生产环境构建指南:outputStyle压缩与sourcemap配置避坑手册

2026/8/25 8:34:58

grunt-contrib-compass生产环境构建指南:outputStyle压缩与sourcemap配置避坑手册 【免费下载链接】grunt-contrib-compass Compile Compass to CSS. 项目地址: https://gitcode.com/gh_mirrors/gr/grunt-contrib-compass 使用 grunt-contrib-compass 将 Sas…

监听每一次开关访问:feature-flags的4个事件如何助力你的审计与监控

监听每一次开关访问:feature-flags的4个事件如何助力你的审计与监控

2026/8/25 8:24:57

监听每一次开关访问:feature-flags的4个事件如何助力你的审计与监控 【免费下载链接】feature-flags A Laravel package for handling feature flags 项目地址: https://gitcode.com/gh_mirrors/fe/feature-flags 如果你在用 Laravel 管理功能开关&#xff0…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/24 19:53:32

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/24 19:56:07

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/24 21:16:09

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

2026/8/25 0:04:34

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory Meta Description:GetQzonehistory 是一个QQ空间历史说…

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

2026/8/25 0:04:35

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

2026/8/25 0:04:35

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server! 项目地址: https:/…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/22 4:13:47

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/22 1:32:34

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…