第五期 C/C++数据结构 二叉树的遍历以及结点数、深度
代码详见后面
实验三 树和二叉树
一、实验目的
1.使学生熟练掌握二叉树的逻辑结构和存储结构(重点)。
2.熟练掌握二叉树的各种遍历算法(难点)。
二、实验原理及说明
1. 前序遍历算法思想:
(1)访问根结点;
(2)前序遍历左子树;
(3)前序遍历右子树
2. 中序遍历算法思想:
(1)中序遍历左子树;
(2)访问根结点;
(3)中序遍历右子树。
3. 后序遍历算法思想:
(1)后序遍历左子树;
(2)后序遍历右子树;
(3)访问根结点。
4. 二叉树层次遍历算法思想:
本算法要采用一个队列q,先将二叉树根结点入队列,然后退队列,输出该结点;若它有左子树,便将左子树根结点入队列;若它有右子树,便将右子树根结点入队列,直到队列空为止。因为队列的特点是先进先出,从而达到按层次顺序遍历二叉树的目的。
三、实验内容
(一)问题描述
建立一棵二叉树,试编程实现二叉树的如下基本操作:
1. 按先序序列构造一棵二叉链表表示的二叉树T;
2. 对这棵二叉树进行遍历:先序、中序、后序以及层次遍历,分别输出结点的遍历序列;
3. 求二叉树的深度/结点数目/叶结点数目;
4. 将二叉树每个结点的左右子树交换位置。(选做)
(二)基本要求
从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),
四、实验安全事项
1.实验课中,保持实验室环境卫生。
2.实验完成后,应将仪器、工具及实验场地等进行清理、归还,经实验教师或实验技术人员同意后,方可离开实验室
3.实验室内禁止存放易燃易爆品及各类其它个人生活用品。禁止使用非实验用电器(如电加热器、电暖壶等)设备。
五、实验提交方式
□ 实验报告 □ 现场打分 √ 线上平台提交 □ 其它( )
#include<iostream>
using namespace std;//二叉树的二叉链表存储结构
typedef struct BiTNode{char data;struct BiTNode* lchild, * rchild;
}BiTNode, * BiTree;//先序建立二叉树
void CreateBiTree(BiTree& T){char ch;cin>>ch;if (ch == '#'){T = NULL;}else{T = new BiTNode;T->data = ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild);}
}//先序遍历复制二叉树
void Copy(BiTree T, BiTree& NewT){//空树 ,递归结束if (T == NULL){ NewT = NULL;return ;}else{NewT = new BiTNode;NewT->data = T->data; //复制Copy(T->lchild, NewT->lchild); //递归复制左子树Copy(T->rchild, NewT->rchild); //递归复制右子树}
}// 计算二叉树的深度
// 二叉树的深度为左右子树深度的较大者加1。
int Depth(BiTree T)
{int m, n;if (T == NULL){return 0;}else{m = Depth(T->lchild);n = Depth(T->rchild);if (m > n) return (m + 1);else return (n + 1);}
}//计算二叉树结点的个数
//二叉树的结点数为:左子树的结点数+右子树的结点数+1
int NodeCount(BiTree T){if (T == NULL){return 0;}else{return NodeCount(T->lchild) + NodeCount(T->rchild) + 1;}
}//先序遍历输出
void PreOrderTraverse(BiTree T)
{if (T){cout << T->data;PreOrderTraverse(T->lchild);PreOrderTraverse(T->rchild);}
}
//中序遍历输出
void InOrderTraverse(BiTree T)
{if (T){InOrderTraverse(T->lchild);cout << T->data;InOrderTraverse(T->rchild);}
}
//后序遍历输出
void PostOrderTraverse(BiTree T)
{if (T){PostOrderTraverse(T->lchild);PostOrderTraverse(T->rchild);cout << T->data;}
}int main(){BiTree T;int depth, node;cout<<"请输入要建立的二叉树(先序)用。#表示空树:";CreateBiTree(T);depth = Depth(T);cout << "树的深度为:" << depth;cout << endl;node = NodeCount(T);cout << "树的节点个数为:" << node;cout << endl;//遍历a b c # # d e # # f # # g # #cout << "先序遍历:" ;PreOrderTraverse(T);cout << endl;cout << "中序遍历:";InOrderTraverse(T);cout << endl;cout << "后序遍历:" ;PostOrderTraverse(T);cout << endl;
}
运行代码:
第五期 C/C++数据结构 二叉树的遍历以及结点数、深度相关推荐
- 假设二叉树采用二叉链存储结构,编写一个算法,求出二叉树中的叶子结点数,并设计主函数调用上述算法。
假设二叉树采用二叉链存储结构,编写一个算法,求出二叉树中的叶子结点数,并设计主函数调用上述算法. #include<iostream>//蓝多多算法实验五:二叉树的应用(二) #inclu ...
- 数据结构——二叉树的遍历
"树"是一种重要的数据结构,本文浅谈二叉树的遍历问题,採用C语言描写叙述. 一.二叉树基础 1)定义:有且仅有一个根结点,除根节点外,每一个结点仅仅有一个父结点,最多含有两个子节点 ...
- 数据结构-二叉树层次遍历
首先介绍下二叉树的层次遍历即按照顺序对树节点依次访问,如下图: 顺序遍历的结果为:ABCDEFGHIJK 我们可以借助一个队列来实现二叉树的层次遍历:思路如下: 先将二叉树根节点入队,然后出队,访问该 ...
- 数据结构-二叉树的遍历
二叉树是每个结点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree)和"右子树"(right subtree).二叉树常被用于实现二叉查 ...
- java遍历树结构数据_Java数据结构——二叉树的遍历(汇总)
二叉树的遍历分为深度优先遍历(DFS)和广度优先遍历(BFS) DFS遍历主要有: 前序遍历 中序遍历 后序遍历 一.递归实现DFS Node.java: public class Node { pr ...
- 数据结构 - 二叉树的遍历
分享一个大牛的人工智能教程.零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net 二叉树的遍历 N:访问根结点,L:遍历根结点的左子树 ...
- Java数据结构——二叉树的遍历
作者:敲代码の流川枫 博客主页:流川枫的博客 专栏:和我一起学java 语录:Stay hungry stay foolish 工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器--牛客 ...
- 数据结构 二叉树的遍历
所谓遍历, 无非就是把1个容器的所有元素逐个输出, 而这个输出是线性的. 但是二叉树是1个非线性的容器, 如何把它的元素按一定顺序输出就是1个值得学习的课题了. 一般来讲, 遍历二叉树有3种方法, ...
- 02331 数据结构 二叉树的遍历
算法思想 按一定规则和顺序走遍二叉树的所有结点,使每一个节点都被访问一次,且只被访问一次. (1)先序遍历[根->左->右] 1. 访问根节点2. 遍历左孩子3. 遍历有孩子 (2)中序遍 ...
最新文章
- 转:Community Clips 使用指南
- Spark集群搭建+基于zookeeper实现高可用HA
- 为进大厂刷爆算法题,最后却倒在了基础题上?太苦了!
- Web开发学习路线图
- 数据挖掘算法_算法篇(01) 数据挖掘算法初探
- csdn颜色字体的改变
- mysql mybatis 工具类_我肝了一个星期,为你们整理出了mybatis程序配置教程
- 中公学python要多久_学完风变编程我才知道:一天的工作,五分钟就能完成!
- Centos7 安装Jdk1.8u172
- php后台代码自动生成程序,Thinkphp自定义代码生成工具及用法说明(附下载地址)...
- springmvc注解@
- Atitit 网络技术体系图 目录 1. 的三网融合是	1 1.1. 电话网、有线电视网	1 1.2. 计算机网	1 2. 计算机网	1 2.1. 互联网	1 2.2. 局域网	1 3. 第1章 计
- malloc.h头文件以及malloc函数
- java静态池_java 常量池静态变量详解
- Docker容器网络模式与数据管理
- curl encode
- Allure自动化测试报告之修改allure测试报告logo与标题,让报告具有公司的气息
- PD win10虚拟机 主机互联
- 洛谷P2678 Java解法
- 微信小程序生成带参数的二维码