博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构——二叉树树的遍历理论与实现
阅读量:4341 次
发布时间:2019-06-07

本文共 2018 字,大约阅读时间需要 6 分钟。

摘要:本文描述和实现了二叉树的遍历方法,包括:层次遍历, 先序遍历(VRL),中序遍历(RVL),后序遍历(RLV)。

1. 遍历(Traversals)

(1)层次遍历

(2)V:root ; R: right child ;  L:left child

先序遍历(VRL):A B DHIEJ CFG

中序遍历(RVL):HDIBJE A FCG

后序遍历(RLV):HIDJEB FGC A

2. 先序遍历(VRL)

 

template 
static void CXBitTree
::PreOder( CXTreeNode
*node ) const{ if( node == NULL ) return; visit( root ); PreOder( node->GetLeft() ); PreOder( node->GetRight() );}

有些人把PreOrder这样“优化”:

 

 

template 
static void CXBitTree
::PreOder2( CXTreeNode
*node ) const{ visit( root ); if( node->GetLeft() ) PreOder( node->GetLeft() ); if( node->GetRight() ) PreOder( node->GetRight() );}

但是这样真的优化了吗?

 

PreOrder2比PreOrder有2点劣势:

(1)对于每一个node的访问需要调用2次(检查非空1次,访问1次),对于复杂的Node结构来说,这显然是很费时。

(2)如果最初传递给PreOrder2的node == NULL, 会产生问题,为了解决这个问题需要额外的监测。

3.  中序遍历(RVL)

 

template 
static void CXBitTree
::InOder( CXTreeNode
*node ) const{ if( node == NULL ) return; PreOder( node->GetLeft() ); visit( root ); PreOder( node->GetRight() );}

 

 

4. 后序遍历(RLV)

 

template 
static void CXBitTree
::PostOder( CXTreeNode
*node ) const{ if( node == NULL ) return; PreOder( node->GetLeft() ); PreOder( node->GetRight() ); visit( root );}

 

 

5. 层次遍历

 

template 
static void CXBitTree
::LevelOder( CXTreeNode
*node ) const{ if( node == NULL ) return; std::queue
*> queue_nodes; CXTreeNode
* pnode; queue_nodes.push( node ); while ( !queue_nodes.empty() ) { pnode = queue_nodes.front(); queue_nodes.pop(); visit( pnode ); if ( pnode->GetLeft() ) { queue_nodes.push( pnode->GetLeft() ); } if( pnode->GetRight() ) { queue_nodes.push( pnode->GetRight() ); } }//while}

 

 

6. 算法分析

设:每个节点的访问时间复杂度为O( 1 ),

那么:这4中算法的时间复杂度为O(n).

 

转载于:https://www.cnblogs.com/snake-hand/p/3172162.html

你可能感兴趣的文章
阶段3 2.Spring_09.JdbcTemplate的基本使用_5 JdbcTemplate在spring的ioc中使用
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_02.ssm整合之搭建环境
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_3、快速创建SpringBoot应用之手工创建web应用...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_5、SpringBoot2.x的依赖默认Maven版本...
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_08.ssm整合之Spring整合MyBatis框架
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_9、SpringBoot基础HTTP其他提交方法请求实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_12、SpringBoot2.x文件上传实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_19、SpringBoot个性化启动banner设置debug日志...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_20、SpringBoot2.x配置全局异常实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第5节 SpringBoot部署war项目到tomcat9和启动原理讲解_23、SpringBoot2.x启动原理概述...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_21、SpringBoot2.x配置全局异常返回自定义页面...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_32..SpringBoot2.x持久化数据方式介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_34、SpringBoot整合Mybatis实操和打印SQL语句...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_35、事务介绍和常见的隔离级别,传播行为...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_40、Redis工具类封装讲解和实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_37、分布式缓存Redis介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_42、SpringBoot常用定时任务配置实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_39、SpringBoot2.x整合redis实战讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第14节 高级篇幅之SpringBoot多环境配置_59、SpringBoot多环境配置介绍和项目实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_41、SpringBoot定时任务schedule讲解...
查看>>