首页 > 其他分享 >二叉树初步理解

二叉树初步理解

时间:2023-11-16 14:22:32浏览次数:31  
标签:LChild 初步 LPTREE 理解 二叉树 RChild include root 节点

二叉树初步:

代码如下,注释很详细。

#define  _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <iomanip>
#include <ctype.h>
#include <ctime>
#include <stack>
#include <list>
#include <queue>
#include <algorithm>
using namespace std;

//利用结构体去保存每一个节点的各个数据(节点数据、创建左右节点)
typedef struct treeNode//typedef重命名去简化每一次创建结构体时的操作
{
	char data;//节点数据
	struct treeNode* LChild;//创建左子树
	struct treeNode* RChild;//创建右子树
}TREE,*LPTREE;//将创建结构体命名为TREE,创建结构体指针重命名为LPTREE

//创建新节点的函数。(输入新节点的数据)
LPTREE creatNode(char data)
{
	//malloc()函数分配内存空间
	//sizeof(LPTREE)大小为LPTREE的内存空间
	//整个含义:
	//分配一个LPTREE类型大小的数据空间给newNode
	LPTREE newNode = (LPTREE)malloc(sizeof(TREE));
	newNode->data = data;//将新节点的数据输入
	newNode->LChild = NULL;//将左子树和右子树初始化为空
	newNode->RChild = NULL;
	return newNode;//返回数据
}

//插入数据的函数。(完善一个节点左右子树的信息)-做链接
void insertNode(LPTREE parentNode, LPTREE LChild, LPTREE RChild)
{
	parentNode->LChild = LChild;//父节点的左边赋值左节点
	parentNode->RChild = RChild;//父节点的右边赋值右节点
}

//创建一个打印函数
void printCurNodeData(LPTREE curData)
{
	cout << curData->data << "    ";
}
																				
//递归法遍历
//先序
void preOrder(LPTREE root)//输入节点
{
	if (root != NULL)
	{
		printCurNodeData(root);//打印根部
		preOrder(root->LChild);//递归打印左子树
		preOrder(root->RChild);//同上
	}
}
//中序
void midOrder(LPTREE root)//输入节点
{
	if (root != NULL)
	{
		preOrder(root->LChild);//递归打印左子树
		printCurNodeData(root);//打印根部
		preOrder(root->RChild);//同上
	}
}
//后序
void lastOrder(LPTREE root)//输入节点
{
	if (root != NULL)
	{
		preOrder(root->LChild);//递归打印左子树
		preOrder(root->RChild);//同上
		printCurNodeData(root);//打印根部
	}
}

int main()
{
	//创建A-G节点
	LPTREE A = creatNode('A');
	LPTREE B = creatNode('B');
	LPTREE C = creatNode('C');
	LPTREE D = creatNode('D');
	LPTREE E = creatNode('E');
	LPTREE F = creatNode('F');
	LPTREE G = creatNode('G');
	//建立连接
	insertNode(A, B, C);
	insertNode(B, D, NULL);
	insertNode(D, NULL, G);
	insertNode(C, E, F);

	cout << "先序遍历" << endl;
	preOrder(A);
	cout << endl;
	cout << "中序遍历" << endl;
	midOrder(A);
	cout << endl;
	cout << "后序遍历" << endl;
	lastOrder(A);
	cout << endl;

	return 0;
}

标签:LChild,初步,LPTREE,理解,二叉树,RChild,include,root,节点
From: https://www.cnblogs.com/csclixuan/p/17836124.html

相关文章

  • FWT 的另一种理解
    思路若要\(\oplus\)卷积\(a\)和\(b\)(此处\(\oplus\)可以是任意运算),我们希望存在一个线性变换\(\mathscrF\),满足:\[c_k=\sum_{i\oplusj=k}a_ib_j\Longleftrightarrow\mathscrF(a)\cdot\mathscrF(b)=\mathscrF(c)\]若求\(\mathscrF(x)\)和\(\maths......
  • 理解技术和业务的共同目标
    昨天更新了一篇关于稳定性保障的文章,我在文末写了这样一句:遇上降本增效,或者换一个重业务轻技术的领导上台,技术团队就是第一个被砍的。毕竟在国内这种环境,哪儿来的技术导向和工程师文化,不都是营销为王和短期利润为重。有同学提了一个疑问,技术和业务,到底哪个重要?毕竟绝大多数公......
  • 简单例子理解 Qt 中 QObject: Cannot create children for a parent that is in a dif
    c++guiprogrammingwithqt中关于QThread的用法的限制下面这句话的翻译不清QObjectisreentrant,buttherearethreeconstraintstokeepinmind:ChildQObjectsmustbecreatedintheirparent'sthread.Inparticular,thismeansthattheobjectscreatedina......
  • 算法~base64算法理解
    base64Base64是一种用于将二进制数据编码成ASCII字符的编码方式。它主要用于在文字环境中传输或存储二进制数据,如在电子邮件、XML文件、URL参数等。Base64编码不是一种加密算法,而是一种编码方式,其主要作用是将二进制数据转换为文本数据,以便更容易在文本协议中处理。Base64......
  • 2023全球智能汽车AI挑战赛——赛道二:智能驾驶汽车虚拟仿真视频数据理解赛道
    赛题:智能驾驶汽车虚拟仿真视频数据理解赛道任务:输入:元宇宙仿真平台生成的前视摄像头虚拟视频数据(8-10秒左右);输出:对视频中的信息进行综合理解,以指定的json文件格式,按照数据说明中的关键词(key)填充描述型的文本信息(value,中文/英文均可以)初赛提交格式:{"author":"abc","time":"YY......
  • 理解与使用Javascript中的回调函数
     js里的解释:Acallbackisafunctionthatispassedasanargumenttoanotherfunctionandisexecutedafteritsparentfunctionhascompleted.    从字面上理解下来就是,回调就是一个函数的调用过程。假如函数a有一个参数,这个参数是个函数b,当函数a执行完......
  • 对前端工程师这个职位的理解
    a. 前端是最贴近用户的程序员,前端的能力就是能让产品从90分进化到100分,甚至更好b. 参与项目,快速高质量完成实现效果图,精确到1px;c.与团队成员,UI设计,产品经理的沟通;d. 做好的页面结构,页面重构和用户体验;e. 处理hack,兼容、写出优美的代码格式;f. 针对服务器的优化、拥抱最新前......
  • 相机靶面和图像传感器的理解与应用
    一、相机靶面(SensorSize)的基本概念相机靶面,即相机内部的图像传感器尺寸,是衡量相机性能的重要指标。靶面尺寸越大,通常意味着相机能够捕获更多的光线和细节,具有更好的低光表现和更浅的景深效果。靶面尺寸的大小直接影响着相机的图像质量和使用场景。二、特定靶面尺寸的理解:以2/3......
  • 11月智能汽车AI挑战赛——智能驾驶汽车虚拟仿真视频数据理解
    赛题理解:赛题任务:输入:元宇宙仿真平台生成的前视摄像头虚拟视频数据(8-10秒左右);输出:对视频中的信息进行综合理解,以指定的json文件格式,按照数据说明中的关键词(key)填充描述型的文本信息(value,中文/英文均可以);赛题只提供了测试集,所以我们要通过预训练模型预测,或者直接使用外部数据训练后......
  • 深入理解JMeter中的JSON Extractor
    ApacheJMeter是一款出色的开源性能和功能测试工具,这款工具提供了丰富的功能和强大的扩展性,可以应对各种复杂的测试需求。当我们在进行接口测试时,经常会遇到需要从接口响应中提取信息并在后续请求中使用的情况。这时候,JMeter中的JSONExtractor就派上了用场。JSONExtractor是JMe......