搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
Gausst松鼠会
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
Unity animator动画倒放的方法_animator 倒放
2
癫痫数据集-波恩大学数据集_波恩大学脑电图公开数据集
3
基于点云的三维重建_点云系列公开课:三维检测、三维分割、三维配准
4
论文代码复现 | 无人机与卡车联合配送(Python+Gurobi)(The flying sidekick traveling salesman problem)_fstsp 模型
5
Stable Diffusion WebUI 中英文双语插件(sd-webui-bilingual-localization)并解决了不生效的情况_sd-webui-bilingual-localization-main
6
Python实战开发及案例分析(31)—— 哈希算法
7
MTK平台Android 安全中secure boot机制_mtk secure boot
8
Android使用ViewPager实现图片轮播系列之三:手动滑动 + 左右箭头,714页PDF的鸿蒙学习笔记,
9
Python:获取ip地址的三种方法_python 获取ip
10
用通俗易懂的方式讲解大模型分布式训练并行技术:多维混合并行
当前位置:
article
> 正文
二叉树的遍历_二叉树遍历
作者:Gausst松鼠会 | 2024-05-26 07:37:20
赞
踩
二叉树遍历
首先来看一棵二叉树:
1、前序遍历:
前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问
根结点
,然后遍历左子树,最后遍历右子树。
若
二叉树
为空则结束返回,否则:
(1)访问根结点;
(2)前序遍历左子树;
(3)前序遍历右子树 ;
需要注意的是:遍历左右子树时仍然采用前序遍历方法。可以看出前序遍历后,遍历结果为:631254978
2、中序遍历:
中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。在遍历左、右子树时,仍然先遍历左子树,再访问根结点,最后遍历右子树。即:
若
二叉树
为空则结束返回,
否则:
(1)中序遍历左子树;
(2)访问根结点;
(3)中序遍历右子树;
注意的是:遍历左右子树时仍然采用中序遍历方法。最上图的二叉树用中序遍历的结果是:123456789
3、后续遍历:
后序遍历首先遍历左子树,然后遍历右子树,最后访问根结点,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后遍历根结点。即:
若
二叉树
为空则结束返回,
否则:
(1)后序遍历左子树;
(2)后序遍历右子树;
(3)访问根结点;
如图所示的二叉树,用后序遍历的结果是:214538796
三种遍历的递归实现:
[java]
view plain
copy
public
class
Node {
//二叉树节点
private
int
data;
private
Node leftNode;
private
Node rightNode;
public
Node(
int
data, Node leftNode, Node rightNode){
this
.data = data;
this
.leftNode = leftNode;
this
.rightNode = rightNode;
}
public
int
getData(){
return
data;
}
public
void
setData(
int
data){
this
.data = data;
}
public
Node getLeftNode(){
return
leftNode;
}
public
void
setLeftNode(Node leftNode){
this
.leftNode = leftNode;
}
public
Node getRightNode(){
return
rightNode;
}
public
void
setRightNode(Node rightNode){
this
.rightNode = rightNode;
}
}
三种遍历的递归实现:
[java]
view plain
copy
public
class
BinaryTree_DiGui {
/*
* 二叉树先序中序后序排序
* 方式:递归。
*/
//注意必须逆序简历,先建立子节点,再逆序往上建立,
//因为非叶子节点会使用到下面的节点,而初始化是按顺序初始化得,不逆序建立会报错
public
static
Node init(){
Node J =
new
Node(
8
,
null
,
null
);
Node H =
new
Node(
4
,
null
,
null
);
Node G =
new
Node(
2
,
null
,
null
);
Node F =
new
Node(
7
,
null
, J);
Node E =
new
Node(
5
, H,
null
);
Node D =
new
Node(
1
,
null
, G);
Node C =
new
Node(
9
, F,
null
);
Node B =
new
Node(
3
, D, E);
Node A =
new
Node(
6
, B, C);
return
A;
//返回根节点
}
//打印节点数值
public
static
void
printNode(Node node){
System.out.print(node.getData());
}
//先序遍历
public
static
void
preOrder(Node root){
printNode(root);
//打印根节点
if
(root.getLeftNode() !=
null
){
//使用递归遍历左孩子
preOrder(root.getLeftNode());
}
if
(root.getRightNode() !=
null
){
//使用递归遍历右孩子
preOrder(root.getRightNode());
}
}
//中序遍历
public
static
void
inOrder(Node root){
if
(root.getLeftNode() !=
null
){
//使用递归遍历左孩子
inOrder(root.getLeftNode());
}
printNode(root);
//打印根节点
if
(root.getRightNode() !=
null
){
//使用递归遍历右孩子
inOrder(root.getRightNode());
}
}
//后续遍历
public
static
void
postOrder(Node root){
if
(root.getLeftNode() !=
null
){
//使用递归遍历左孩子
postOrder(root.getLeftNode());
}
if
(root.getRightNode() !=
null
){
//使用递归遍历右孩子
postOrder(root.getRightNode());
}
printNode(root);
//打印根节点
}
public
static
void
main(String[] args){
// BinaryTree tree = new BinaryTree();//注释掉本行后类中方法需变为static
Node root = init();
System.out.println(
"先序遍历"
);
preOrder(root);
System.out.println(
""
);
System.out.println(
"中序遍历"
);
inOrder(root);
System.out.println(
""
);
System.out.println(
"后序遍历"
);
postOrder(root);
System.out.println(
""
);
}
}
通过栈实现三种遍历(非递归):
[java]
view plain
copy
public
class
BinaryTree_Zhan {
/*
*
* 二叉树先序中序后序排序
* 方式:采用非递归方式。
*/
//注意必须逆序简历,先建立子节点,再逆序往上建立,
//因为非叶子节点会使用到下面的节点,而初始化是按顺序初始化得,不逆序建立会报错
public
static
Node init(){
Node J =
new
Node(
8
,
null
,
null
);
Node H =
new
Node(
4
,
null
,
null
);
Node G =
new
Node(
2
,
null
,
null
);
Node F =
new
Node(
7
,
null
, J);
Node E =
new
Node(
5
, H,
null
);
Node D =
new
Node(
1
,
null
, G);
Node C =
new
Node(
9
, F,
null
);
Node B =
new
Node(
3
, D, E);
Node A =
new
Node(
6
, B, C);
return
A;
//返回根节点
}
//打印节点数值
public
static
void
printNode(Node node){
System.out.print(node.getData());
}
public
static
void
preOrder_stack(Node root){
//先序遍历
Stack<Node> stack =
new
Stack<Node>();
Node node = root;
while
(node !=
null
|| stack.size()>
0
){
//将所有左孩子压栈
if
(node !=
null
){
//压栈之前先访问
printNode(node);
stack.push(node);
node = node.getLeftNode();
}
else
{
node = stack.pop();
node = node.getRightNode();
}
}
}
public
static
void
inOrder_Stack(Node root){
//中序遍历
Stack<Node> stack =
new
Stack<Node>();
Node node = root;
while
(node !=
null
|| stack.size()>
0
){
if
(node !=
null
){
stack.push(node);
//直接压栈
node = node.getLeftNode();
}
else
{
node = stack.pop();
//出栈并访问
printNode(node);
node = node.getRightNode();
}
}
}
public
static
void
postOrder_Stack(Node root){
//后续遍历
Stack<Node> stack =
new
Stack<Node>();
Stack<Node> output =
new
Stack<Node>();
//构造一个中间栈来存储逆后续遍历的结果
Node node = root;
while
(node !=
null
|| stack.size()>
0
){
if
(node !=
null
){
output.push(node);
stack.push(node);
node = node.getRightNode();
}
else
{
node = stack.pop();
node = node.getLeftNode();
}
}
while
(output.size()>
0
){
printNode(output.pop());
}
}
public
static
void
main(String[] args){
Node root = init();
System.out.println(
"先序遍历"
);
preOrder_stack(root);
System.out.println(
""
);
System.out.println(
"中序遍历"
);
inOrder_Stack(root);
System.out.println(
""
);
System.out.println(
"后序遍历"
);
postOrder_Stack(root);
System.out.println(
""
);
}
}
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/625780
推荐阅读
article
Git
多人
协作开发流程...
git
多人
协作
Git
多人
协作开发流程
Git
多人
协作开发流程 一...
赞
踩
article
Java Web开发遇到
java
.
sql
.SQLIntegrityConstraintViolat...
传入的更新参数违反了数据库的条件。插入数据时,具有唯一约束条件的列值重复了。所以当我把传入的参数修改后再使用apipos...
赞
踩
article
@
ComponentScan
配置
扫描
多个
包_
componentscan
扫描
多个
包...
我的Spring版本是5.2.6,使用@
ComponentScan
扫描
多个
包的注解配置:@Configuration@C...
赞
踩
article
Sql 中内
连接
、外
连接
、
全
连接
的
区别
!...
sql 中内
连接
、外
连接
、
全
连接
的
区别
!_
全
连接
的
区别
全
连接
的
区别
内
连接
(inner join...
赞
踩
article
Centos7
离线安装
gcc
gcc
-_
centos7
下载
gcc
...
ios]name=iosenable=1gpgcheck=0。_
centos7
下载
gcc
centos7
下载
gcc
...
赞
踩
article
【论文阅读|
cryo
ET】
ICE
-
TIDE
_
cryo
-
et
有哪些软件...
三维
cryo
ET重建的保真度进一步受到采集过程中物理扰动的影响。这些扰动以各种形式表现出来,例如连续采集之间的样本漂移,...
赞
踩
article
【Unknown
column
‘
code
‘
in
‘
field
list
‘】_
unknown
co...
报错_
unknown
column
'
code
'
in
'
field
list
unknown
column
'
code
'...
赞
踩
article
C
语言
教程_
c
语言
oin
...
编辑系统环境变量:Path 饱含 C:\MinGW\binC:\Users\admin>g
c
c
-vUsing buil...
赞
踩
article
Docker
学习
记录_
340999
(
0cm
...
我们从docker是什么,能干嘛,组成,运行原理,和常用命令
学习
了基本使用docker的方法,再从镜像容器,数据卷以及d...
赞
踩
article
深度
学习
----
时间
序列
预测
应用_利用
深度
学习
实现根据矩阵x对y的
时间
序列
预测
...
然而,在
时间
序列
预测
任务中,样本点的
序列
位置关系非常重要,Transformer虽然通过Attention机制实现了超长...
赞
踩
article
【
java
-
数据结构
19
-
队列
的模拟
实现
】...
(这个才是重点)同上,没有元素直接返回即可,只有一个元素(全部置空),普通情况(rear等于前驱,rear置为空),【j...
赞
踩
article
java
社区
超市
购物
系统
(开题+源码)_
超市
购物
系统
项目
背景
研究
...
同时,考虑到用户
购物
的便捷性,将设计智能推荐
系统
,根据用户的
购物
历史和浏览行为,为其推荐相关商品;
社区
超市
购物
系统
的
研究
...
赞
踩
article
使用Topaz Video Enhance AI进行
视频
超
分辨率
_
topaz
video
ai导出视...
今天在整理很久以前制作的
视频
时,发现
分辨率
最高只到1080P,想到B站上好多4k
视频
都是把低
分辨率
的
视频
超分成4K,就想...
赞
踩
article
毕设 深度学习
python
opencv
火焰
检测
识别
火灾
检测
_
opencv
烟雾
火焰
检测
cs...
毕设 深度学习
python
opencv
火焰
检测
识别
火灾
检测
_
opencv
烟雾
火焰
检测
csdn
opencv
烟...
赞
踩
article
基于golang实现
ssh
terminal
...
【代码】基于golang实现
ssh
terminal
。_
ssh
terminal
ssh
terminal
...
赞
踩
article
华为
可信
专业级
认证
是
什么?
_
华为
可信
考试,2024年最新
Golang
架构师成长路线
_
华为
可信
专业级
考...
如火如荼的项目开发工作
是
软件工程师的日常,有一天我突然看到一个让我眼前一亮的OKR(Objectives and Key...
赞
踩
article
unity
Holoens2
开发
,
使用
Vuforia
识别实体或图片 触发交互(一)_
vuforia
应...
为了做好运维面试路上的助攻手
,
特整理了上百道
,
让你面试不慌心不跳
,
高薪offer怀里抱!这次整理的面试题
,
本份面试集锦涵...
赞
踩
article
Caused
by:
java
.
sql
.
SQLSyntaxErrorException
: Unkno...
Caused
by:
java
.
sql
.
SQLSyntaxErrorException
: Unknown
column
...
赞
踩
article
Column 'id' in
field
l
is
t
is
ambiguous
...
mysql:问题:Column 'id' in
field
l
is
t
is
ambiguous
原因:两个表中都有id,它...
赞
踩
article
使用
MinIO
S3
存储
桶备份
Weaviate
_
weaviate
内存
管理
...
这种集成完全符合
MinIO
的承诺,即提供可扩展、安全和高性能的数据
存储
解决方案,现在
Weaviate
的 AI 驱...
赞
踩
相关标签
编辑器
git
github
java
开发语言
spring
后端
ComponentScan
sql
数据库
服务器
linux
运维
论文阅读
python
django
c语言
docker
学习
容器
深度学习
人工智能
数据结构
视频超分辨率
超分辨率