代码详见后面

实验三 树和二叉树

一、实验目的

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++数据结构 二叉树的遍历以及结点数、深度相关推荐

  1. 假设二叉树采用二叉链存储结构,编写一个算法,求出二叉树中的叶子结点数,并设计主函数调用上述算法。

    假设二叉树采用二叉链存储结构,编写一个算法,求出二叉树中的叶子结点数,并设计主函数调用上述算法. #include<iostream>//蓝多多算法实验五:二叉树的应用(二) #inclu ...

  2. 数据结构——二叉树的遍历

    "树"是一种重要的数据结构,本文浅谈二叉树的遍历问题,採用C语言描写叙述. 一.二叉树基础 1)定义:有且仅有一个根结点,除根节点外,每一个结点仅仅有一个父结点,最多含有两个子节点 ...

  3. 数据结构-二叉树层次遍历

    首先介绍下二叉树的层次遍历即按照顺序对树节点依次访问,如下图: 顺序遍历的结果为:ABCDEFGHIJK 我们可以借助一个队列来实现二叉树的层次遍历:思路如下: 先将二叉树根节点入队,然后出队,访问该 ...

  4. 数据结构-二叉树的遍历

    二叉树是每个结点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree)和"右子树"(right subtree).二叉树常被用于实现二叉查 ...

  5. java遍历树结构数据_Java数据结构——二叉树的遍历(汇总)

    二叉树的遍历分为深度优先遍历(DFS)和广度优先遍历(BFS) DFS遍历主要有: 前序遍历 中序遍历 后序遍历 一.递归实现DFS Node.java: public class Node { pr ...

  6. 数据结构 - 二叉树的遍历

    分享一个大牛的人工智能教程.零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net 二叉树的遍历 N:访问根结点,L:遍历根结点的左子树 ...

  7. Java数据结构——二叉树的遍历

    作者:敲代码の流川枫 博客主页:流川枫的博客 专栏:和我一起学java 语录:Stay hungry stay foolish 工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器--牛客 ...

  8. 数据结构 二叉树的遍历

    所谓遍历, 无非就是把1个容器的所有元素逐个输出, 而这个输出是线性的. 但是二叉树是1个非线性的容器,  如何把它的元素按一定顺序输出就是1个值得学习的课题了. 一般来讲, 遍历二叉树有3种方法, ...

  9. 02331 数据结构 二叉树的遍历

    算法思想 按一定规则和顺序走遍二叉树的所有结点,使每一个节点都被访问一次,且只被访问一次. (1)先序遍历[根->左->右] 1. 访问根节点2. 遍历左孩子3. 遍历有孩子 (2)中序遍 ...

最新文章

  1. 转:Community Clips 使用指南
  2. Spark集群搭建+基于zookeeper实现高可用HA
  3. 为进大厂刷爆算法题,最后却倒在了基础题上?太苦了!
  4. Web开发学习路线图
  5. 数据挖掘算法_算法篇(01) 数据挖掘算法初探
  6. csdn颜色字体的改变
  7. mysql mybatis 工具类_我肝了一个星期,为你们整理出了mybatis程序配置教程
  8. 中公学python要多久_学完风变编程我才知道:一天的工作,五分钟就能完成!
  9. Centos7 安装Jdk1.8u172
  10. php后台代码自动生成程序,Thinkphp自定义代码生成工具及用法说明(附下载地址)...
  11. springmvc注解@
  12. Atitit 网络技术体系图 目录 1. 的三网融合是 1 1.1. 电话网、有线电视网 1 1.2. 计算机网 1 2. 计算机网 1 2.1. 互联网 1 2.2. 局域网 1 3. 第1章 计
  13. malloc.h头文件以及malloc函数
  14. java静态池_java 常量池静态变量详解
  15. Docker容器网络模式与数据管理
  16. curl encode
  17. Allure自动化测试报告之修改allure测试报告logo与标题,让报告具有公司的气息
  18. PD win10虚拟机 主机互联
  19. 洛谷P2678 Java解法
  20. 微信小程序生成带参数的二维码

热门文章

  1. 高通芯片处理器(CPU)性能路线图资料
  2. bat命令删除指定文件夹下的空文件夹
  3. Flutter高仿微信-第48篇-群聊-图片
  4. 面试官:讲一下什么是负载均衡,什么是轮询策略、随机策略、哈希策略
  5. word2007 文档结构图字体大小
  6. 阿里巴巴 Java 编码规范最佳实践
  7. 用Photoshop处理和生成pdf文件
  8. POI读取excel文件异常:.OfficeXmlFileException
  9. 【有利可图网】PS教程:把阴沉天气的图片变成阳光明媚
  10. 视频文件按帧抓取图像并保存