数据结构学习之-二叉树的三种递归遍历C++实现及相关应用
来源:互联网 发布:linux 编译java 编辑:程序博客网 时间:2024/05/16 00:28
最近在中国大学mooc上学习了数据结构课程,这周温习了二叉树相关的知识,现在将和二叉树三种遍历方法的原理以及C++实现基本的操作进行总结。二叉树的元素遍历主要有3种方式:前序遍历(根左右),中序遍历(左根右),后序遍历(左右根),三种遍历方式的主要区别在于访问根节点的顺序不一样。
一、三种遍历的基本实现C++实现
BinTree.h头文件实现:
#ifndef _BINTREE_H#define _BINTREE_H#include<stdlib.h>#include<stdio.h>//节点存储的数据类型typedef int ElementType;//二叉树节点的基本定义typedef struct TreeNode* BinTree;typedef BinTree Position;struct TreeNode{//节点存储的数据ElementType Data;BinTree Left;//左边子树BinTree Right;//右边子树};//遍历算法--递归实现void PreOrderTraversal(BinTree BT);void InOrderTraversal(BinTree BT);void PostOrderTraversal(BinTree BT);#endifBinTree.cpp文件实现:
#include"BinTree.h"//创建一个空的二叉树BinTree CreateBinTree(){BinTree tree = NULL;return tree;}//二叉树的先序遍历//根 - 左 - 右//递归实现void PreOrderTraversal(BinTree BT){//如果该节点不为空if(BT){printf("%d", BT->Data);//先访问根节点PreOrderTraversal(BT->Left);//循环遍历左子树PreOrderTraversal(BT->Right);//循环遍历右子树}}//二叉树的先序遍历//左 - 根 - 右//递归实现void InOrderTraversal(BinTree BT){if(BT){InOrderTraversal(BT->Left);//先循环遍历左子树printf("%d", BT->Data);//访问根节点InOrderTraversal(BT->Right);//循环遍历右子树}}//二叉树的后序遍历//左 - 右 - 根//递归实现void PostOrderTraversal(BinTree BT){if(BT){PostOrderTraversal(BT->Left);//先循环遍历左子树PostOrderTraversal(BT->Right);//循环遍历右子树printf("%d", BT->Data);//访问根节点}}
注意:三种遍历方式的主要区别在于访问根节点的顺序不同。
二、二叉树遍历的相关应用
//输出二叉树的中的根节点void PreOrderPrintLeaves(BinTree BT){//树非空if(BT){//左右节点都是NULL,则是叶子节点if(!BT->Left && !BT->Right)printf("%d", BT->Data);PreOrderPrintLeaves(BT->Left);PreOrderPrintLeaves(BT->Right);}}//输出二叉树的高度int PostOrderGetHeight(BinTree BT){int HL, HR, MaxH;if(BT){HL = PostOrderGetHeight(BT->Left);//左树的深度HR = PostOrderGetHeight(BT->Right);//右树的深度MaxH = (HL>HR)?HL:HR;//左右子树较大的深度//这里的加1至关重要 -- 没有加则所有的深度都是0return (MaxH+1);//返回树的深度}else //空树 return 0;}
阅读全文
0 0
- 数据结构学习之-二叉树的三种递归遍历C++实现及相关应用
- 递归实现二叉树的建立及前中后序遍历 c
- 数据结构与算法学习记录--二叉树的创建,递归遍历,非递归遍历的实现
- 【C++】非递归的三种二叉树遍历
- 数据结构的C实现_二叉树的非递归遍历和层序遍历
- c语言实现顺序二叉树的非递归的三种遍历算法
- <数据结构>二叉树的递归、非递归以及层次遍历算法C语言实现
- 二叉树的三种遍历的非递归实现
- 二叉树的三种遍历的非递归实现
- 三种二叉树遍历的非递归实现
- java实现二叉树的三种遍历算法(递归)
- 二叉树的三种递归遍历实现
- 递归实现二叉树的三种遍历
- 递归实现二叉树的三种遍历
- java实现二叉树的三种遍历算法(递归)
- 二叉树的三种遍历非递归实现
- 数据结构之二叉树的递归创建、递归遍历
- 数据结构 二叉树的建立及三种遍历方法
- SSM+Shiro写的一个简单的登录验证
- android应用调试之如何保存logcat日志到本地
- Sqlite 时间段查询
- Java基础之SimpleDateFormat和GregorianCalendar的使用
- 【“盛大游戏杯”第15届上海大学程序设计联赛 J】【欧拉函数 约数欧拉函数之和为本身】
- 数据结构学习之-二叉树的三种递归遍历C++实现及相关应用
- sails 用户定义路由(1)
- linux基本知识(2)
- javascript深拷贝和浅拷贝
- Vue或React多页应用脚手架
- 关于eclipse-logcat不单独打印项目日志的经验
- PHP内核探索:Apache模块介绍
- 位运算贪心——BZOJ3668/Luogu2114 [Noi2014]起床困难综合症
- 自定义评价打分控件RatingBar,可以自定义星星大小和间距