C++数据结构X篇_18_二叉树的创建(根据遍历结果创建二叉树;#号法创建树)

news2024/10/6 0:33:12

本篇将会介绍二叉树的创建,重点学习#号法创建树的方法。

文章目录

  • 1. 根据遍历结果创建二叉树(只需记住结论即可)
    • 1.1 首先有一个问题,根据中序遍历的结果能确定一棵树吗?
    • 1.2 那如何才能确定一棵树?(带中序的可以确定一个树)
    • 1.3 举例
  • 2. #号法创建树(重点)
    • 2.1 什么是#号法创建树?
    • 2.2 #号法创建树的代码实现

1. 根据遍历结果创建二叉树(只需记住结论即可)

1.1 首先有一个问题,根据中序遍历的结果能确定一棵树吗?

举例:中序遍历结果为:“12345”,这个“12345”能确定一棵树吗?

请思考,会有多少种形状,树的形状能唯一确定吗?
在这里插入图片描述
从上面的结果可以看出,根据某一个遍历结果显然是无法确定树的形状的,这是因为你无法确认是左子树还是右子树。

1.2 那如何才能确定一棵树?(带中序的可以确定一个树)

结论:

  • 通过中序遍历和先序遍历可以确定一个树
  • 通过中序遍历和后续遍历可以确定一个树
  • 通过先序遍历和后序遍历确定不了一个树

1.3 举例

假设有两组结果:
先序遍历结果:A D E B C F
中序遍历结果:D E A C F B
根据先序遍历结果知道二叉树的根节点为A,从中序遍历结果知道二叉树的左子树为:DE,右子树为:CFB
结合分析先序和中序遍历结果,得到如下二叉树:
在这里插入图片描述

2. #号法创建树(重点)

2.1 什么是#号法创建树?

创建树,让树的每一个节点都变成度数为 2的树

先序遍历结果:124###3## (#代表null即空)
在这里插入图片描述

2.2 #号法创建树的代码实现

#include <iostream>
using namespace std;


//定义二叉树节点
class binarynode
{
public:
	char ch;			 //节点数据域
	binarynode* lchild;  //左孩子
	binarynode* rchild;  //右孩子
};

void recursion(binarynode* root)
{
	if (root == nullptr)
	{
		return;
	}
	cout << root->ch;
	recursion(root->lchild);
	recursion(root->rchild);
}

//创建树
binarynode* createBinaryTree()
{
	//清空输入缓存区
	fflush(stdin);

	//等待输入
	char ch;
	scanf("%c", &ch);

	binarynode* node;
	binarynode* lchild;  //左孩子
	binarynode* rchild;  //右孩子

	if (ch == '#')
	{
		node = nullptr;
	}
	else
	{
		lchild = createBinaryTree();
		rchild = createBinaryTree();	

		node = new binarynode;
		node->ch = ch;
		node->lchild = lchild;
		node->rchild = rchild;
	}

	return node;
}

int main()
{
	//创建树
	binarynode* root=createBinaryTree();
	//打印树
	recursion(root);
	system("pause");
	return 0;
}

运行结果:分别输入124###3##对应字符得到一个二叉树输出

  1. 二叉树的创建

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

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

相关文章

Python 框架学习 Django篇 (四) 数据库增删改查(CURD)

在上一章结尾我们了解到如采用前后端开发分离的架构模式开发&#xff0c;后端几乎不负责任何展现界面的工作&#xff0c;只负责对数据进行管理 &#xff0c;对数据的管理主要体现在&#xff1a; &#xff08;增加、修改、删除、列出 &#xff09;具体的接口参考大佬的文档BYSM…

插入排序改进 将交换变成赋值语句 优点适用于近乎有序的序列

效果非常的明显 下面给出代码截图 再给出原代码 #include<iostream> #include<string> #include "Student.h" #include "sorttesthelper.h" using namespace std;template<typename T >void selectionSort( T arr[], int n){for(int i…

MATLAB——Decision Tress决策树程序

给个关注呦&#xff01;欢迎关注微♥公众号“电击小子程高兴的MATLAB小屋”&#xff0c;海量资源等你来呦&#xff01; 光储直流微电网MATLAB/Simulink仿真 光伏PV三相并网逆变器 %% I. 清空环境变量 clear all clc warning off %% II. 导入数据 第一列是序号 第二…

让你至少拿2份offer的软件测试面试题来了(100题带标准答案)

一、自我介绍 二、灵活问题 1、大概说说之前公司的测试流程 2、测试报告有哪些内容? 3、如何保证用例的覆盖度&#xff1f; 4、什么是测试用例&#xff0c;什么是测试脚本&#xff1f;两者的关系 5、Bug的级别&#xff0c;按照什么划分 6、你认为是bug&#xff0c;开发认…

微信小程序开发的OA会议之会议,投票,个人中心的页面搭建及模板,还有自定义组件的学习

目录 一、自定义组件 1. 创建 2. 定义 3. 编写 4. 使用 二、会议 1. 数据 2. 显示 3. 样式 三、个人中心 1. 页面 2. 样式 四、投票 1. 引用 2. 数据 3. 页面 4. 样式 每篇收获 一、自定义组件 开发者可以将页面内的功能模块抽象成自定义组件&#xff0c;以…

国外访问学者面签技巧

当涉及国外访问学者的面签时&#xff0c;提前准备和掌握一些技巧可以大大增加成功的机会。本文知识人网小编将为您介绍一些关键的面签技巧&#xff0c;帮助您在国外访问学者面签中表现出色。 1.详细准备材料&#xff1a;在面签前&#xff0c;确保您已经准备好所有所需的文件和材…

乙酰基四肽-3/Acetyl Tetrapeptide-3——刺激毛囊,长出新头发,有效防止秃头

社会对头发很着迷。从圣经人物参孙&#xff08;他从头发中获得力量&#xff0c;并说如果剃光头他就会失去力量&#xff09;&#xff0c;到社交媒体上无休无止地谈论名人的标志性风格&#xff0c;头发是一个永恒的话题。 为什么痴迷&#xff1f;好吧&#xff0c;我们的头发是外…

分布式事务及CAP和BASE顶底

一、分布式事务 单体应用肯定就不存在分布式事务了&#xff0c;只有在分布式微服务系统中&#xff0c;各个服务之间通过RPC调用后&#xff0c;每个微服务有自己和数据库的连接&#xff0c;各个微服务的回滚不影响其他的微服务事务&#xff0c;这几必须使用分布式事务来解决分布…

2022年京东双十一家用电器全品类数据回顾

2023年双十一临近&#xff0c;特此带大家回顾一下去年双十一热门品类的一些战况数据。 由于涉及到热门细分品类众多&#xff0c;会分为多篇内容。 本篇先从京东家用电器品类说起。 2022年双11期间&#xff0c;京东家用电器累计销量2960万件&#xff0c;累计销售额约280亿元&…

2023下半年软考考试方式、考试时间和批次安排!(附加模拟系统绘图操作说明)

注意了下半年考试的伙伴们&#xff01;官方发了通告了&#xff01; 按照《2023年下半年计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试有关工作调整的通告》&#xff0c;自2023年下半年起&#xff0c;计算机软件资格考试方式均由纸笔考试改革为计算机化考试。 …

便携式电源,移动电源,电源组,便携式汽车应急启动电源的适用范围是什么?合规标准是什么?如何办理?

便携式电源&#xff0c;移动电源&#xff0c;电源组&#xff0c;便携式汽车应急启动电源的适用范围是什么&#xff1f;合规标准是什么&#xff1f;如何办理&#xff1f; 一、亚马逊的便携式电源&#xff0c;移动电源&#xff0c;电源组&#xff0c;便携式汽车应急启动电源的适…

海思Hi3519DV500边缘计算盒子-英码IVP09A,双核A55 64位处理器

产品简介 IVP09A是英码科技推出的边缘计算智能工作站&#xff0c;搭载双核 Cortex-A55 架构AI 处理器&#xff1b;内置高效的神经网络推理引擎&#xff0c;提供2.5TopsNPU算力;支持多路视频图像识别硬件加速。IVP09A&#xff0c;高效能低成本、稳定易开发、多点布线、联网管控…

FPGA驱动SDRAM

文章目录 一.SDRAM简介&#xff08;手册分析&#xff09;1.1存储空间1.2特征1.3引脚1.4内部结构1.5需要关注的一些时间1.6模式寄存器1.7命令真值表 二.时序分析&#xff08;手册分析&#xff09;2.1Avalon时序2.2行激活时序2.3列读写时序2.4读数据2.5写数据 三.初步设计3.1状态…

冒泡排序给cpu干懵了 哈哈 还有希尔排序 算法补充(学习笔记)

直接给出代码 #include<iostream> #include<string> #include "Student.h" #include "sorttesthelper.h" #include "BubbleSort.h" using namespace std;template<typename T> void shellSort(T arr[], int n){// 计算 incr…

Nginx+keepalived 高可用双机热备—双主模式

双机高可用方法目前分为两种&#xff1a; 1&#xff09;Nginxkeepalived 双机主从模式&#xff1a;即前端使用两台服务器&#xff0c;一台主服务器和一台热备服务器&#xff0c;正常情况下&#xff0c;主服务器绑定一个公网虚拟IP&#xff0c;提供负载均衡服务&#xff0c;热备…

什么是客户端?一文了解客户端定义、特点与功能、搭建方法

客户端&#xff1a;定义、特点与功能、搭建方法 1. 定义&#xff1a; 客户端是计算机网络中的一个术语&#xff0c;指的是在网络通信中充当主动发起请求并接收服务响应的一方。通常&#xff0c;客户端是指运行在终端设备上的软件或硬件实体&#xff0c;通过与服务器进行通信来…

从实体经济和数字经济融合展开,思考商业模式的变化

对于《关于构建数据基础制度更好发挥数据要素作用的意见》想必大家已经不陌生了&#xff0c;之前的文章中也围绕数据要素说了很多东西&#xff0c;数据、数字化、数字经济之类的已经称得上是绝大部分人对未来发展方向的共识&#xff0c;不过今天想从这个《意见》出发&#xff0…

电脑开不了机用U盘重装系统Win10教程

如果我们遇到了电脑开不起机的问题&#xff0c;这给我们的正常使用带来了很大的影响。这时候我们可以借助U盘重装系统的方法&#xff0c;轻松应对这一问题。下面小编给大家详细介绍关于用U盘给开不机的电脑重装Win10系统的教程步骤&#xff0c;操作后用户就能正常使用电脑了。 …

Mac 远程桌面软件

对于使用 Mac 计算机和笔记本电脑的企业来说&#xff0c;适用于 Mac 的远程桌面软件变得越来越重要&#xff0c;随着远程工作变得越来越普遍&#xff0c;IT 管理员和组织需要一种安全的方式来访问和修复问题、处理紧急任务以及监控远程工作站的状态&#xff0c;为了促进远距离协…

结构体和联合体详解

结构体和联合体详解 1.结构体struct1.1 结构体struct的设计1.2 结构体struct变量的定义和初始化举例&#xff1a;使用结构体Student定义并初始化stu1变量。举例&#xff1a;结构体嵌套的初始化方法。 1.3 结构体struct成员变量的访问&#xff08;获取与赋值&#xff09;1.3.1 使…