IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构:实验三,数和二叉树 -> 正文阅读

[数据结构与算法]数据结构:实验三,数和二叉树

一、 实验目的

1.掌握树和二叉树的结构特征,以及各种存储结构的特点及适用范围。
2.掌握用指针类型描述、访问和处理二叉树的运算。

二、实验内容

1.输入先序遍历字符序列,建立二叉链表。
2.分别输出先序、中序和后序遍历二叉树的序列(递归算法)。
3.求二叉树的结点个数。
4.输出二叉树的叶子结点。
5.求二叉树的高度。
6.在主函数中设计一个简单的菜单,分别调试上述算法。
说明:
可以通过下面的案例进行程序测试
输入的先序遍历字符序列为:ABC##DE#G##F###(期中’#’代表空树)。建立好的二叉树及二叉链表表示形式如下图所示:
在这里插入图片描述

代码内容

#include<iostream>
using namespace std;
typedef char TElemType;
#define OK 1
//二叉树的二叉链表存储表示 
typedef struct BiTNode{
	TElemType data;		//节点数据域 
	struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//使用递归的方法先序遍历建立二叉链表,其中'#'表示空树
void CreateBiTree(BiTree &T){
	 TElemType ch;
	 cin>>ch;
	 if(ch=='#')
	 	T=NULL;		//递归出口 
	else{
		T=new BiTNode;		//生成根节点 
		T->data=ch;		//树的数据域赋值ch
		//(*T).data=ch;	
		CreateBiTree(T->lchild);	//递归创建左子树 
		CreateBiTree(T->rchild);	//递归创建右子树 
	}
} 
//使用递归中序输出二叉树
void InOrderTraverse(BiTree T){
	//树非空就开始递归遍历 
	if(T){
		InOrderTraverse(T->lchild);	//中序遍历左子树 
		cout<<T->data<<" ";		//访问根节点 
		InOrderTraverse(T->rchild);	//中序遍历右子树 
	}
} 
//使用递归先序输出二叉树
void PreorderTraverse(BiTree T){
	//树非空就开始递归遍历 
	if(T){
		cout<<T->data<<" ";		//访问根节点 
		PreorderTraverse(T->lchild);	//先序遍历左子树 
		PreorderTraverse(T->rchild);	//先序遍历右子树 
	}
} 
//使用递归后序输出二叉树
void PostorderTraverse(BiTree T){
	//树非空就开始递归遍历 
	if(T){
		PostorderTraverse(T->lchild);	//后序遍历左子树 
		PostorderTraverse(T->rchild);	//后序遍历右子树 
		cout<<T->data<<" ";		//访问根节点 
	}
}
//递归统计二叉树的节点个数
int NodeCount(BiTree T){
	if(T)//树非空,节点数为左子树节点数+有右节点数+1 
		return NodeCount(T->lchild)+NodeCount(T->rchild)+1;
	//如果树为空,递归结束,节点数为0 
	return 0;
} 
//使用递归计算二叉树的高度
int Depth(BiTree T){
	int m,n;//左子树高度m,右子树高度n 
	//树非空开始计算高度 
	if(T){
		m=Depth(T->lchild);	//递归计算左子树高度
		n=Depth(T->rchild);	//递归计算右子树高度
		if(m>n)
			return m+1;
		return n+1; 
	}
	//树为空
	else
		return 0; 
} 
//递归输出所有叶子节点
void PrintLeavers(BiTree T){
	//树非空就输出叶子节点 
	if(T){
		if(!T->lchild&&!T->rchild)
			cout<<T->data<<" ";		//输出叶子节点 
		PrintLeavers(T->lchild);	//递归左子树 
		PrintLeavers(T->rchild);	//递归右子树 
	}
} 
//展示上述功能 
void Display(BiTree T){
	cout<<"    二叉树程序    "<<endl;
	cout<<"------------------"<<endl;
	cout<<"按序号输入执行程序"<<endl;
	cout<<"1.建立二叉树"<<endl;
	cout<<"2.先序遍历二叉树"<<endl;
	cout<<"3.中序遍历二叉树"<<endl;
	cout<<"4.后序遍历二叉树"<<endl;
	cout<<"5.求二叉树节点数"<<endl;
	cout<<"6.输出叶子节点" <<endl;
	cout<<"7.求二叉树的高度"<<endl;
	cout<<"退出程序请按0"<<endl; 
	cout<<"------------------"<<endl;
	int n;
	while(OK){
		cout<<"请输入要执行的功能"<<endl;
		cin>>n;
		switch(n){
			case 1:
				cout<<"输入节点值"<<endl; 
				CreateBiTree(T);	//建立二叉链表 
				break;
			case 2:
				cout<<"先序遍历"<<endl;
				PreorderTraverse(T);	//先序遍历
				cout<<endl;
				break;
			case 3:
				cout<<"中序遍历"<<endl;
				 InOrderTraverse(T);	//中序遍历
				 cout<<endl;
				 break; 
			case 4:
				cout<<"后序遍历"<<endl;
				PostorderTraverse(T);	//后序遍历
				cout<<endl;
				break;
			case 5:
				cout<<"二叉树节点个数为:"<<NodeCount(T)<<endl;	//二叉树结点个数
				break;
			case 6:
				cout<<"二叉树叶子节点如下"<<endl; 
				PrintLeavers(T);	//输出叶子节点
				break;
			case 7:
				cout<<"二叉树高度为:"<<Depth(T)<<endl;	//输出二叉树高度
				break;
			case 0:
				exit(0); 
		}
	}
}
main(){
	BiTree T;
	Display(T);
}

测试结果

在这里插入图片描述

总结

这个试验考察的是对二叉树结构的理解,以及对递归方法的使用和理解,如何去定义实现和使用递归函数,这个程序只是简单的使用了二叉树和递归用到的知识还是比较基础的
但,身为菜狗的我…搞了好久才搞懂…

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-18 11:25:30  更:2021-11-18 11:25:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/9 1:45:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码