二叉树的先序创建、复制、深度及结点个数

文章目录

  • 前言
  • 一、二叉树的先序创建
  • 二、二叉树的复制
  • 三、二叉树的深度
  • 四、二叉树的结点个数
  • 总结


前言

  T_T此专栏用于记录数据结构及算法的(痛苦)学习历程,便于日后复习(这种事情不要啊)。所用教材为《数据结构 C语言版 第2版》严蔚敏。


一、二叉树的先序创建

  相关概念见专栏数据结构与算法,下面给出二叉树先序创建的代码实现:

#include<iostream>
using namespace std;//二叉树的二叉链表存储表示
typedef struct BTNode
{char data;						//结点数据域struct BTNode* lchild, * rchild;	//左右孩子指针
}BTNode, * BiTree;//按先序次序创建二叉树,创建二叉链表表示的二叉树T
void PreCreateBiTree(BiTree& T)
{char ch;cin >> ch;if (ch == '#')  T = NULL;			//递归结束,建空树else {T = new BTNode;T->data = ch;					//生成根结点PreCreateBiTree(T->lchild);	//递归创建左子树PreCreateBiTree(T->rchild);	//递归创建右子树}								
}									//中序遍历二叉树						
void InOrderTraverse(BiTree T)
{if (T) {InOrderTraverse(T->lchild);cout << T->data;InOrderTraverse(T->rchild);}
}
void main()
{BiTree tree;cout << "请输入先序建立二叉链表的序列:\n";PreCreateBiTree(tree);cout << "所建立的二叉链表中序序列:\n";InOrderTraverse(tree);cout << endl;
}

在这里插入图片描述

在这里插入图片描述

二、二叉树的复制

  复制二叉树就是利用已有的一棵二叉树复制得到另外一棵与其完全相同的二叉树。下面给出二叉树的复制的代码实现:

#include<iostream>
using namespace std;//二叉树的二叉链表存储表示
typedef struct BTNode
{char data;						//结点数据域struct BTNode* lchild, * rchild;	//左右孩子指针
}BTNode, * BiTree;//按先序次序创建二叉树,创建二叉链表表示的二叉树T
void PreCreateBiTree(BiTree& T)
{char ch;cin >> ch;if (ch == '#')  T = NULL;			//递归结束,建空树else {T = new BTNode;T->data = ch;					//生成根结点PreCreateBiTree(T->lchild);	//递归创建左子树PreCreateBiTree(T->rchild);	//递归创建右子树}								
}									
//复制树
void Copy(BiTree T, BiTree& NewT)
{if (T == NULL){   							//如果是空树,递归结束NewT = NULL;return;}else{NewT = new BTNode;NewT->data = T->data;					//复制根结点Copy(T->lchild, NewT->lchild);    		//递归复制左子树Copy(T->rchild, NewT->rchild);   		//递归复制右子树}											
}												//中序遍历二叉树						
void InOrderTraverse(BiTree T)
{if (T) {InOrderTraverse(T->lchild);cout << T->data;InOrderTraverse(T->rchild);}
}
void main()
{BiTree tree, new_tree;cout << "请输入建立二叉树的序列:\n";PreCreateBiTree(tree);cout << "所建立的二叉链表中序序列:\n";InOrderTraverse(tree);cout << endl;Copy(tree, new_tree);cout << "复制得到的新树的中序序列:\n";InOrderTraverse(new_tree);cout << endl;
}

在这里插入图片描述

三、二叉树的深度

  二叉树的深度为树中结点的最大层次,下面给出其代码实现:

#include<iostream>
using namespace std;//二叉树的二叉链表存储表示
typedef struct BTNode
{char data;						//结点数据域struct BTNode* lchild, * rchild;	//左右孩子指针
}BTNode, * BiTree;//按先序次序创建二叉树,创建二叉链表表示的二叉树T
void PreCreateBiTree(BiTree& T)
{char ch;cin >> ch;if (ch == '#')  T = NULL;			//递归结束,建空树else {T = new BTNode;T->data = ch;					//生成根结点PreCreateBiTree(T->lchild);	//递归创建左子树PreCreateBiTree(T->rchild);	//递归创建右子树}								
}																			
//得到树的深度
int Depth(BiTree T)
{int m, n;if (T == NULL) return 0;        //如果是空树,深度为0,递归结束else{m = Depth(T->lchild);			//递归计算左子树的深度记为mn = Depth(T->rchild);			//递归计算右子树的深度记为nif (m > n) return(m + 1);		//二叉树的深度为m 与n的较大者加1else return (n + 1);}
}void main()
{BiTree tree;cout << "请输入建立二叉链表的序列:\n";PreCreateBiTree(tree);cout << endl;cout << "树的深度为:" << Depth(tree) << endl;
}

在这里插入图片描述

四、二叉树的结点个数

  有时我们需要找到树的结点个数,如下图有七个结点。
在这里插入图片描述
  下面给出代码实现:

#include<iostream>
using namespace std;//二叉树的二叉链表存储表示
typedef struct BTNode
{char data;						//结点数据域struct BTNode* lchild, * rchild;	//左右孩子指针
}BTNode, * BiTree;//按先序次序创建二叉树,创建二叉链表表示的二叉树T
void PreCreateBiTree(BiTree& T)
{char ch;cin >> ch;if (ch == '#')  T = NULL;			//递归结束,建空树else {T = new BTNode;T->data = ch;					//生成根结点PreCreateBiTree(T->lchild);	//递归创建左子树PreCreateBiTree(T->rchild);	//递归创建右子树}								
}									
//得到树的结点数
int NodeCount(BiTree T)
{if (T == NULL) return 0;  			// 如果是空树,则结点个数为0,递归结束else return NodeCount(T->lchild) + NodeCount(T->rchild) + 1;//否则结点个数为左子树的结点个数+右子树的结点个数+1
}
void main()
{BiTree tree;cout << "请输入建立二叉链表的序列:\n";PreCreateBiTree(tree);cout << "结点个数为:" << NodeCount(tree) << endl;
}

在这里插入图片描述


总结

  路漫漫其修远兮,吾将上下而摆烂。(因为准备其他比赛断学了好久5555)
  有任何疑问和补充,欢迎交流。(但我显然不会T_T)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/848908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

体育器材管理系统(Java+MySQL)

技术栈 Java语言&#xff1a;作为主要编程语言&#xff0c;用于编写应用逻辑和界面交互。MySQL数据库&#xff1a;用于存储和管理体育器材的相关数据。Swing窗口视图&#xff1a;用于创建图形用户界面&#xff0c;使用户能够通过窗口进行操作&#xff08;GBK编码&#xff09;。…

线性模型-分类

一、线性判别分析LDA 线性判别分析是一种经典的线性学习方法&#xff0c;在二分类问题上最早是Fisher提出的&#xff0c;亦称为Fisher判别分析。 Fisher判别分析是一种用于降维和分类的统计方法&#xff0c;旨在找到可以最好区分不同类别的特征。它基于类内方差和类间方差的比…

Polar Web【简单】uploader

Polar Web【简单】uploader Contents Polar Web【简单】uploader思路EXP运行&总结 思路 本题的重点仍是文件上传&#xff0c;只是期间需要加上一步自主的文件上传。 打开环境&#xff0c;审查代码&#xff0c;发现在上传文件之后会自动生成一个以MD5散列值命名的目录&#…

COMPUTEX 2024 国际电脑展即将举行,英伟达宣布将Copilot+引入RTX系列设备,赋能游戏本AI助理

COMPUTEX 2024 国际电脑展即将于2024年6月4日至7日在台北南港展览馆1馆及2馆盛大举行。作为业界瞩目的盛会&#xff0c;本次展会不仅吸引了全球各地的科技爱好者&#xff0c;更迎来了AMD CEO苏姿丰博士和NVIDIA首席执行官黄仁勋的精彩演讲。 在展会的开幕之际&#xff0c;图形…

查看服务器端口是否打开,如何查看服务器端口是否打开

查看服务器端口是否打开&#xff0c;是确保服务器正常运行和网络通信畅通的关键步骤。以下是几个有力的方法&#xff0c;帮助你快速、准确地判断端口状态。 首先&#xff0c;你可以使用telnet命令来检测端口的连通性。telnet是一个网络协议&#xff0c;可以用于远程登录和管理网…

如何将 MySQL 数据库共享给他人?

文章目录 共享所有数据库给他人1. 连接到 MySQL 数据库2. 选择要使用的数据库3. 修改连接所需的 host4. 刷新权限 共享部分数据库给他人1. 创建用户2. 授权3. 刷新权限 结语 &#x1f389;欢迎来到Java学习路线专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨~我是I…

张大哥笔记:高考,万人过独木桥,你怕不怕摔倒?

今天刷到一个新闻&#xff1a;宁夏煤业计划招600名挖煤的井下操作工&#xff0c;要求大学学历&#xff01;结果却吸引了7900人来报名&#xff01;我都惊呆了&#xff0c;什么时候挖煤都要求这么高的学历了&#xff0c;那读书到底起啥作用&#xff01; 如果一个人读书读到大学后…

1.Rust安装

目录 一、安装1.1 在Windows上安装1.2 在Linux下安装 二、包管理工具三、Hello World3.1 安装IDE3.2 输出Hello World 一、安装 1.1 在Windows上安装 点击页面 安装 Rust - Rust 程序设计语言 (rust-lang.org)&#xff0c;选择"下载RUSTUP-INIT.EXE(64位&#xff09;&qu…

Vue——子级向父级使用props传递数据(函数)

文章目录 前言原理案例效果演示 前言 看到这个标题&#xff0c;相信很多人会说我&#xff0c;你之前博客写的父级向子级中传递数据使用的是props&#xff0c;然后说的子级向父级传递数据则是用的$emit。 并且还说了对于String、数组Array&#xff0c;只能是父级使用props传递…

矩阵链相乘(动态规划法)

问题分析 矩阵链相乘问题是一个经典的动态规划问题。给定一系列矩阵&#xff0c;目标是找到一种最优的乘法顺序&#xff0c;使得所有矩阵相乘所需的标量乘法次数最少。矩阵链相乘问题的关键在于利用动态规划来避免重复计算子问题。 算法设计 定义子问题&#xff1a;设 &…

HTTP-一

一、超文本传输 1. 文本传输 > 字符串(能在utf8/gbk等码表上找到合法字符) 2. 超文本传输 > 不仅仅是字符串,还可以携带一些图片,特殊得格式 HTML 3. 富文本 word http0.9 -> http1.0 -> http1.1 -> http2.0 -> http3.0 http1.0是主流版本 2.0 和…

redis安裝启动

1、下载redis解压 https://github.com/tporadowski/redis/releases 2、打开cmd&#xff0c;切换到解压的文件夹 3、redis-server.exe redis.windows.conf 启动redis redis可通过命令行输入config set requirepass password和直接修改redis.config文件中修改 requirepass 来设…

英伟达再创历史,市值超越苹果,跃居全球第二大上市公司

进入2024年&#xff0c;英伟达股价依然突飞猛进。 今天凌晨&#xff0c;英伟达凭借其在AI领域强劲的创新能力和市场势头&#xff0c;达成了历史性的里程碑——市值首次突破3万亿美元&#xff0c;成功超越苹果&#xff0c;成为全球市值第二大上市公司。 排名仅次于微软。 英伟达…

f1c100s 荔枝派 系统移植

一。交叉编译环境配置 1.1下载交叉工具链&#xff1a;https://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabi/ 1.2解压安装 在home目录下新建 工程目录&#xff1a;mkdir f1c100s_project 将windows下的gcc-linaro-7.2.1-2017.11-x86…

二叉搜索树(BST,Binary Search Tree)

目录 前言 一、二叉搜索树概念 二、二叉搜索树的实现与操作 1.查找 2.插入 3.删除 4.中序遍历 5.完整代码 三、二叉搜索树的应用&#xff08;K模型、KV模型&#xff09; 1.K模型 2.KV模型 3.完整代码 四、二叉搜索树的性能分析 前言 为何学&#xff1f; 1.二叉…

我的python管理

目前环境 Anaconda&#xff1a;python3.9 python2.7 IDA&#xff1a;python3.8 pycharm&#xff1a;&#xff1f;&#xff1f; 以后应该会补吧… 因为某些文件似乎用的python2决定整个python2 安装python2.7 打开anaconda命令行输入 conda create --name python27 python2…

JAVAEE值网络编程(2)_TCP流套接字及通信模型、TCP网络编程及代码实例

前言 在上一节内容中&#xff0c;我们介绍了什么是套接字&#xff0c;以及使用UDP数据报套接字网络编程&#xff0c; 最后我们还介绍了Java数据报套接字通信模型以及相关代码实例。在这一节我们将会介绍TCP流套接字编程。 一、流套接字及通信模型 1.1 TCP套接字 TCP&#xff0…

云计算-高级云资源配置(Advanced Cloud Provisioning)

向Bucket添加公共访问&#xff08;Adding Public Access to Bucket&#xff09; 在模块5中&#xff0c;我们已经看到如何使用CloudFormation创建和更新一个Bucket。现在我们将进一步更新该Bucket&#xff0c;添加公共访问权限。我们在模块5中使用的模板&#xff08;third_templ…

内网安全--隧道技术代理技术

注:本文仅做技术交流,请勿非法破坏... 目录 项目: 1-Ngrok 用法 2-Frp 用法 3-Nps 用法 4-Spp 用法 工具: windows下: Proxifier(推荐~) Sockscap ccproxy Linux下: Proxychains 用法 http://t.csdnimg.cn/88Ew7 隧道技术&#xff1a;解决不出网协议上线的问…

TikTok运营必看|7大广告类型及特点

TikTok广告是品牌或创作者付费向特定目标受众展示的推广内容&#xff08;通常是全屏视频&#xff09;。TikTok 上的广告是一种社交媒体营销形式&#xff0c;通常旨在提高广告商的知名度或销售特定产品或服务。 就 TikTok广告投放而言&#xff0c;其组织层级分为三个层级&#x…