【数据结构】 实验报告10 顺序、链式存储结构的二叉树递归遍历、层次遍历求高度

递归和非递归方法(层次遍历)计算二叉树高度 递归和非递归方法(层次遍历)计算二叉树高度 1.递归方式计算二叉树高度 int Btdepth(BiTree T){ if(!T) return 0; ldep=Btdepth(T->lchild); rdep=Btdepth(T->rchild); return ldep>rdep? ldep+1:rdep+1; } 2.层次遍历方法计算二叉树高度: 算法思想:last指向每层最右结点,level为高度。从头节点开始, 边入队,然后再出队进行层次遍历,并 阅读详情

一、实验目的和要求 (源码在最后)

要求:
两种及以上存储结构(建议 顺序存储结构和链式存储结构各一)、两种及以上方法(建议 递归遍历和层次遍历方法各一)。分析各代码性能。
抽象数据类型(二叉树)独立模块实现。
其它要求同作业-01要求。

二、实验环境

软件环境:visual stdio 2017
硬件环境:①CPU:Intel(R)Core(TM)i7-8565U CPU @1.80Ghz
②内存:8.0GB

三、实验内容

设计算法并实现求解二叉树高度(深度)。

四、实验过程

4.1 任务定义和问题分析

本次实验需要解决的问题主要为一下三个问题:数据结构的构建,递归遍历的实现,层次遍历的实现。

4.2 数据结构的选择和概要设计

方案一:
顺序存储结构,用一个数组记录二叉树结点值,数组下标记录二叉树编号(下标从1开始用)。递归遍历直接递归,层次遍历直接按层以编号顺序将编号与值一并输出。最终求得高度。
方案二:
链式存储结构,用结构体记录二叉树各结点。递归遍历直接递归,层次遍历以队列为辅助工具,不断入队,出队,达到层次遍历的目的。最终求得高度。

4.3 详细设计

方案一:
①数据结构的构建:
设计成一个class,其中负责记录结点值的数组,其下标为1记录根值,一般的,对于整数i,第2i位(如果存在)为第i位左子结点,2i+1位(如果存在)为第i位右子结点。
②递归遍历的实现:
设计一个递归函数,传入参数为结点标记值i(缺省值为1)其终止条件为:第i位对应结点不存在,返回0。其他情况每次返回各子树的左子树长度和右子树长度的最大值+1。

int GetlengthByRecursion(int i = 1)
	{
		if (i > totalnum || array[i] == ' ') return 0;
		return max(GetlengthByRecursion(2 * i), GetlengthByRecursion(2 * i + 1)) + 1;
	}

③层次遍历的实现:
循环输出各层,即输出各层数组值,同时得到二叉树的高度。

方案二:
①数据结构的构建:
设计成一个struct,内有data记录结点值,leftson指针作为左儿子结点指针,rightson指针作为右儿子结点指针。
②递归遍历的实现:
设计一个递归函数,思路同方案一。
③层次遍历的实现:
先定义好一个队列(同样采用链式结构),该队列用来作为二叉树结点的储存结构。先让根结点入队,之后进入一个循环:以len记录当前队列长度,再次进入循环:循环从1->len,队列头元素出队,记为node,输出node结点的数据,再将node的左儿子、右儿子依次入队。
这样,一个大循环中的小循环便是以层的形式,输出一个二叉树。每进行一次这样的循环,二叉树的高度便+1。

五、测试及结果分析

5.1 实验数据

在这里插入图片描述

以该二叉树来测试算法是否有效。

5.2 结果及分析

在这里插入图片描述

(中序遍历,先序遍历,后序遍历,这些是实验中的中间产物,保留下来,没有去除)
实验后分析:在采用顺序结构存储二叉树时,具有明显的问题:若二叉树不是完全二叉树形式,为了保持结点之间的关系,不得不空出许多元素来,这就造成了空间的浪费。在极端情况下,仅有n个结点的二叉树,却需要2^n-1个元素空间,这显然是不能接受的。顺序存储结构的优点在于其遍历较快,当然,这也需要在二叉树是完全二叉树时才能体现出来。
而链式存储结构,我们不需要关心二叉树是否为完全二叉树,因为链式存储结构本身的递归特性,其对每一个结点的操作都是相同的。
因此,我认为,在建立一般的二叉树时采用链式结构较为方便,建立完全二叉树时采用顺序存储结构更为方便。

六、实验收获

通过本次实验,加深了我对二叉树的理解,让我学会了如何构建一个二叉树,同时也对顺序结构与链式结构的优缺点理解更深。编程水平也得到了一定的提升。

七、附录(源代码)

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;

//顺序存储结构
template<typename T>
class SeqBT
{
public:
	SeqBT(int totalnum)      
	{
		if (totalnum > 0)
		{
			this->totalnum = totalnum;
			array = new T[totalnum + 1];
			memset(array, ' ', (totalnum + 1) * sizeof(T));
		}
		
	}
	~SeqBT()
	{
		delete[]array;
	}
	void insert(int num, T data)
	{
		if (num <= totalnum)
			array[num] = data;
	}
	int GetlengthByRecursion(int i = 1)
	{
		if (i > totalnum || array[i] == ' ') return 0;
		return max(GetlengthByRecursion(2 * i), GetlengthByRecursion(2 * i + 1)) + 1;
	}
	int GetlengthByLevel()
	{
		int length = 0;
		for (; pow(2.0, length+1) - 1 <= totalnum; length++)
		{
			cout << "第" << length + 1 << "层的元素为:";
			for (int i = pow(2.0, length); i <= pow(2.0, length + 1) - 1; i++)
				cout << i << ":" << array[i] << " ";
			cout << endl;
		}
		return length;
	}
private:
	int totalnum;
	T* array;
};
//链式存储结构
template<typename T>
struct TreeNode
{
	T data;
	TreeNode<T>* leftson;
	TreeNode<T>* rightson;
	TreeNode()
	{
		leftson = NULL;
		rightson = NULL;
	}
};
//二叉树结点链表(用于队列)
template<typename T>
struct Node
{
	TreeNode<T>* data;
	Node* next;
	Node()
	{
		data = NULL;
		next = NULL;
	}
};
//层次遍历需要用到的队列(简单设计)
template<typename T>
class queue
{
public:
	queue()
	{
		head = new Node<T>;
		rear = head;
		length = 0;
	}
	int getlength()
	{
		return length;
	}
	void push(TreeNode<T>* a)
	{
		Node<T>* s = new Node<T>;
		rear->next = s;
		s->data = a;
		rear = s;
		length++;
	}
	void pop(TreeNode<T>* & a)
	{
		Node<T>* s = new Node<T>;
		s = head->next;
		a = s->data;
		head->next = s->next;
		delete s;
		if (head->next == NULL)
		{
			rear = head;
		}
		length--;
	}
private:
	Node<T>* head;
	Node<T>* rear;
	int length;
};
//中序遍历算法
template<typename T>
void Inorder(TreeNode<T>*tree)
{
	if (tree == NULL) return;
	if (tree->leftson != NULL)
		Inorder(tree->leftson);
	cout << tree->data << " ";
	if (tree->rightson != NULL)
		Inorder(tree->rightson);
}
//先序遍历算法
template<typename T>
void Preorder(TreeNode<T>*tree)
{
	if (tree == NULL)  return;
	cout << tree->data << " ";
	if (tree->leftson != NULL)
		Preorder(tree->leftson);
	if (tree->rightson != NULL)
		Preorder(tree->rightson);
}
//后续遍历算法
template<typename T>
void Postorder(TreeNode<T>*tree)
{
	if (tree == NULL) return;
	if (tree->leftson != NULL)
		Postorder(tree->leftson);
	if (tree->rightson != NULL)
		Postorder(tree->rightson);
	cout << tree->data << " ";
}
//递归遍历求高度算法
template<typename T>
int GetlengthByRecursion(TreeNode<T>*tree)
{
	if (tree == NULL)
		return 0;
	return max(GetlengthByRecursion(tree->leftson), GetlengthByRecursion(tree->rightson)) + 1;
}
//层次遍历求高度算法
template<typename T> 
int GetlengthByLevel(TreeNode<T>* tree)
{
	queue<T> Queue;
	Queue.push(tree);
	int length = 0;
	while (Queue.getlength()!=0)
	{   
		cout << "第" << length + 1 << "层元素:";
		int len = Queue.getlength();
		for (int i = 1; i <= len; i++)
		{
			TreeNode<T>* node;
			Queue.pop(node);
			cout << node->data << " ";
			if (node->leftson != NULL)    Queue.push(node->leftson);
			if (node->rightson != NULL)   Queue.push(node->rightson);	
		}
		cout << endl;
		length++;
		
	}
	return length;
}
int main()
{
	//顺序存储结构的二叉树的创建
	cout << "顺式存储结构:" << endl;
	SeqBT<char> sequenceBT(15);
	sequenceBT.insert(1, 'A');
	sequenceBT.insert(2, 'B');
	sequenceBT.insert(3, 'E');
	sequenceBT.insert(4, 'C');
	sequenceBT.insert(5, 'D');
	sequenceBT.insert(7, 'F');
	sequenceBT.insert(14, 'G');
	//递归遍历
	cout << "递归遍历求高度:" << endl;
	cout << sequenceBT.GetlengthByRecursion() << endl;
	//层次遍历
	cout << "层次遍历求高度:" << endl;
	cout << sequenceBT.GetlengthByLevel();

	for (int i = 0; i <= 4; i++) cout << endl;


	//链式存储结构的二叉树的创建
	cout << "链式存储结构:" << endl;
	TreeNode<char>A, B, C, D, E, F, G;
	A.data = 'A';
	B.data = 'B';
	C.data = 'C';
	D.data = 'D';
	E.data = 'E';
	F.data = 'F';
	G.data = 'G';
	A.leftson = &B;
	A.rightson = &E;
	B.leftson = &C;
	B.rightson = &D;
	E.rightson = &F;
	F.leftson = &G;
	TreeNode<char>*root = &A;
	//中序遍历
	cout << "中序遍历:";
	Inorder(root);
	cout << endl;
	//先序遍历
	cout << "先序遍历:";
	Preorder(root);
	cout << endl;
	//后序遍历
	cout << "后序遍历:";
	Postorder(root);
	cout << endl;
	//递归遍历
	cout << "递归遍历求得高度为:";
	cout << GetlengthByRecursion(root) << endl;
    //层次遍历
	cout << "对二叉树进行层次遍历并得到高度:" << endl;
	cout << GetlengthByLevel(root) << endl;

}
数据结构实验报告-实现二叉树的基本操作-用顺序存储和链式存储结构 参考资料:《数据结构》(C语言版)严蔚敏&&吴伟民&&米宁著 要求选用顺序存储结构和二叉链表存储结构实现抽象数据类型二叉树的基本操作。有个亮点是利用字符在dos界面显示二叉树的结构形态。 里面包含了完整的源程序和实验报告文档。 实验报告包含了完整的步骤包括: 一.抽象数据类型二叉树的定义 二.存储结构定义(包括顺序存储和二叉链表)及各基本操作的实现 三.测试方案。包括详细的测试函数 四.测试结果。对所有操作的测试过程中二叉树的变化截图。 五.二叉树各基本操作时间复杂度与存储结构特点分析及对算法的改进设想。 六.实验总结和体会 实现的基本操作如下: InitBiTree(&T) DestroyBiTree(&T) CreateBiTree(&T) ClearBiTree(&T) BiTreeEmpty(T) BiTreeDepth(T) Root(T) Value(T,e) Assign(T,&e,value) Parent(T,e) LeftChild(T,e) RightChild(T,e) LeftSibling(T,e) RightSibling(T,e) InsertChild(T,p,LR,c) DeleteChild(T,p,LR) PreOrderTraverse(T,Visit()) InOrderTraverse(T,Visit()) PostOrderTraverse(T,Visit()) LevelOrderTraverse(T,Visit()) 下载清单: Base.h //全局常量、公共变量、公共函数等 BiTree.h //二叉链表二叉树实现 BiTree_Main.cpp //二叉链表二叉树测试程序 SqBiTree.h //顺序存储二叉树实现 SqBiTree_Main.cpp //顺序存储二叉树测试程序 抽象数据类型实现-二叉树-实验报告.doc 立即下载

相关推荐

数据结构实验报告6-树-二叉树的遍历算法-实验内容及要求.docx

编写程序,用先序递归遍历法建立二叉树的二叉链表存储结构,然后输出其先序、中序、后序以及层次遍历结点访问次序。其中层次遍历的实现需使用循环队列。二叉树结点数据类型建议选用字符类型

数据结构实验报告-二叉树的存储结构的实现与应用

按照上机实验报告模板,写出二叉树的抽象数据类型定义ADT,其他模块(如果有)和函数的功能说明,本程序包含的函数列表,函数之间的调用关系。按照教材中关于二叉树的抽象数据类型定义,采用二叉链表存储结构,编程实现二叉树的各种基本操作,并通过主函数调用,简单测试各基本函数的正确性。初始条件:二叉树 T 存在,p 指向 T 中某个结点,LR 为 0 或 1,非空二叉树 c 与 T 不相交且右子树为空。(不要用上传附件形式)(1)采用二叉链表存储结构,完成二叉树的层次遍历,先序遍历的非递归算法和中序遍历的非递归算法。

qq_51122012的博客 3400

STM32F103C8T6驱动DM542步进电机:从CubeMX配置到按键控制的全流程避坑指南

本文详细介绍了如何使用STM32F103C8T6通过CubeMX配置驱动DM542步进电机的全流程,包括PWM频率计算、GPIO模式选择及按键控制实现。重点解决了常见硬件连接错误、PWM参数配置及加减速算法优化,帮助开发者快速搭建稳定的电机控制系统。

weixin_42741930的博客 307

数据结构实验报告,二叉树的基本操作(C语言)

数据结构实验报告,二叉树的基本操作(C语言)

VLOKL的博客 7517

【HarmonyOS】ArkUI的组件扩展

ArkuI的组件扩展主要是通过等装饰器来对于一些常用的自定义组件进行封装, 来简化UI开发流程, 提高自定义组件的可复用性。

2302_79763237的博客 1166

全网最详细 解决戴维南定理的详细推导

替代定理,戴维南定理详细证明

m0_52555753的博客 3万+

数据结构——二叉树的建立与遍历算法(实验报告)

实验名称:二叉树的建立与遍历算法 指导教师: 实验日期:2022年月日 实验地点: 成绩: 实验目的: 1、掌握二叉树的定义。 2、二叉树的链式存储结构及在链式存储结构中三种遍历(前序,中序,后序)操作的实现及应用。 实验内容: 编写程序,实现以下功能: (1)建立一棵二叉树(以链表存储),对该二叉树进行遍历并输出该二叉树的前序,中序,后序遍历序列。要求前序、中序遍历用非递归方法,后序遍历用递归方法完成。 ...

qq_64831449的博客 6911

别再手动抓波形了!用Synopsys AXI VIP的Port Monitor自动收集事务数据(附完整连接Scoreboard代码)

当标准Port Monitor无法满足需求时,Synopsys提供的callback机制就像一套精密的手术工具,允许你深入VIP内部进行定制化改造。创建自定义监控点的四步法继承基类// 其他自定义字段...endclass重写目标phase方法// 克隆事务并发送到自定义端口在env中注册callbackcustom_cb);连接自定义端口到分析组件经典应用场景地址phase特定检查数据beat级监控自定义性能统计异常注入检测。

weixin_28716181的博客 396

二叉树的遍历(c语言数据结构实验报告三)

二叉树的遍历一、实验目的或任务二、实验教学基本要求三、实验教学的内容或要求四、实验类型或性质五、实验开出要求六、实验所需仪器设备七、实验所用材料八、实验过程 实验项目中文名称:二叉树的遍历 实验项目英文名称:Binary tree traverse 实验项目编码:3 实验学时:5 适用专业:信息与计算科学、数学与应用数学 所属课程:数据结构 开课学院:理学院 开课学期:第5学期 教材及实验指导书: 耿国华主编,《数据结构—(第三版)》,电子工业出版社,2011年 一、实验目的或任务 通过指导学生上机实践,对

库蒂尼奥的博客 6559

LaTex的下载与安装(2024小白+windows系统)

本文主要介绍了Latex的下载与安装,还包括安装过程中遇到的小问题的解决。

m0_53096519的博客 2万+

农业生产AI决策系统架构设计解密:数据层-模型层-应用层核心逻辑

想象一下,在一个炎热的夏日,传统农田里的农民伯伯正满头大汗地检查每一株玉米是否缺水;而几公里外的智慧农场里,一位年轻农民正在空调房里滑动手机屏幕,看着AI系统自动生成的灌溉计划——这就是农业生产AI决策系统带来的改变。本文的目的,就是要揭开这个"智能农业大脑"的面纱,详细讲解它的"身体构造"(架构设计)和"工作原理"(核心逻辑)。我们将聚焦系统最核心的三个部分:数据层(收集农田信息)、模型层(分析信息并思考决策)和应用层(将决策告诉农民)。

AI智能探索者的博客 1325

【数据结构】 顺序、链式存储结构的森林递归遍历、层次遍历求高度

降维问题:顺序、链式存储结构的二叉树递归遍历、层次遍历求高度 全部源代码在最后 一、概要设计 测试数据:如图所示森林 森林采用兄弟孩子链表表示法。 森林的数据输入采取输入兄弟孩子链表表示法下的等价二叉树的扩展先序遍历形成的线性串的方法(原理为森林先序遍历结果与等价二叉树的先序遍历结果相同) 输入数据:ABEK..F..CG..DH.I.J...L.MN... 算法设计 以链式存储结构为例 递归遍历求高度:由于孩子兄弟链表表示法是把兄弟当儿子,所以对应二叉树的所有左子树的最大高度便是森林的高度。这样,在求

RealCoder的博客 1428

为什么 CL_DEMO_OUTPUT 不能用于生产用途:不仅是 demo 标签那么简单

摘要:CL_DEMO_OUTPUT 虽能快速展示ABAP数据,但存在严重生产风险:1) 官方定位为示例工具,不承诺兼容性与支持;2) 非Released API,云环境直接不可用;3) 依赖SAP GUI,缺乏日志关键特性;4) 存在版本漂移、类型限制、性能隐患及安全缺口。典型事故案例包括后台Job崩溃、Gateway链路污染和云迁移失败。生产环境应改用结构化日志(如SLG1)或稳定API输出,避免将调试工具误作工程方案。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 131

【数据结构】二叉树的基本操作大全,学会二叉树基本操作这一篇就够了:二叉树前序、中序、后序、层次遍历;求二叉树总结点个数,叶子结点个数,二叉树第k层的结点个数;求二叉树的高度;在二叉树中查找值为x的结点

【数据结构】二叉树的基本操作大全,学会二叉树基本操作这一篇就够了:二叉树前序、中序、后序、层次遍历;求二叉树总结点个数,叶子结点个数,二叉树第k层的结点个数;求二叉树的高度;在二叉树中查找值为x的结点

2301_76606232的博客 6022

Challenge 4 - OSCP A

在c盘下发现一个windows.old,在里面可以找到SYSTEM和SAM文件,下载到本地,利用samdump2解密发现没解出来,再来试试pwdump.py(https://github.com/CiscoCXSecurity/creddump7)得到压缩包密码bludecode,解压之后发现一个比较特殊的文件configuration.php,里面有两个类似密码的字符串。登录之后在/opt/backups/下发现几个特殊文件,其中sitebackup3.zip是个正常的压缩包。但是这个压缩包是有密码的。

羽的博客 5776

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

#头歌 数据结构 实验七 二叉树的建立及应用

二叉树或者是一棵空树。或者是一棵由一个根结点和两棵互不相交的分别称做根结点的左子树和右子树所组成的非空树,左子树和右子树又同样都是一棵二叉树。度为2的树至少有3个结点,而二叉树的结点数可以为0。度为2的树不区分子树的次序,而二叉树中的每个结点最多有两个孩子结点,且必须要区分左右子树,即使在结点只有一棵子树的情况下也要明确指出该子树是左子树还是右子树。

千浔的博客 4100

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【数据结构】树和二叉树详细分析(全)

树的定义 树(Tree)是n(n>=0)个结点的有限集,它或为空树(n= 0); 或为非空树,对于非空树T: (1)有且仅有一个称之为根的结点; (2)除根结点以外的其余结点可分为 m(m>O)个互不相交的有限集 T1 T2 , …Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。 树的基本术语 ...

码农研究僧的博客 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

数据结构系列 二叉树的遍历(顺序存储)

https://blog.youkuaiyun.com/lin20044140410/article/details/89436835二叉树链式存储 数据结构-树 树是一种一对多的数据结构,是n(n>=0)个结点的有限集。N=0时为空树。在任意一棵非空树中:1,有且只有一个特定的称为根root的结点,2,当n>1时,其余结点可分为m (m>0)个互不相交的有限集T1,T2,,,,Tm,...

lin20080410的专栏 6270

【数据结构——二叉树】二叉树及其应用2023(头歌习题)【合集】

(头歌习题附答案) 二叉树或者是一棵空树。或者是一棵由一个根结点和两棵互不相交的分别称做根结点的左子树和右子树所组成的非空树,左子树和右子树又同样都是一棵二叉树。二叉树的逻辑示意图二叉树与度为2的树的区别:度为2的树至少有3个结点,而二叉树的结点数可以为0。度为2的树不区分子树的次序,而二叉树中的每个结点最多有两个孩子结点,且必须要区分左右子树,即使在结点只有一棵子树的情况下也要明确指出该子树是左子树还是右子树。二叉树的5种形态:二叉树的五种形态二叉树的性质。

2301_76435948的博客 5237

【算法与数据结构】二叉树 (二叉树遍历、递归与非递归实现先中后序遍历、层次遍历)

二叉树树的知识点1.1名词解释二叉树2.1二叉树的性质2.1.1性质2.1.2存储结构2.2 二叉树遍历2.2.1递归实现三种遍历升级二推一1.先序和中序推后序2.中序和后序推先序2.2.2非递归实现三种遍历二叉树遍历——栈实现层次遍历—— 队列实现小结: 树的知识点 1.1名词解释 1.节点的度: 一个节点含有的子树的个数称为该节点的度; 2.树的度: 一棵树中,最大的节点的度称为树的度; 3.叶节点或终端节点: 度为的节点; 4.非终端节点或分支节点: 度不为零的节点; 5.父亲节点或父节点: 若-一个

放纵小开爱的博客 743

猿创征文 | 详解二叉树之遍历及其应用(动图遍历演示)

二叉树的遍历和相关应用的介绍和学习到这里就结束啦~目前简单的一些数据结构基本就拿C实现介绍差不多啦,后面就会进入排序的学习哈。但是在这里,希望大家能够将前面的树的基础概念以及之前的线性结构知识进行回顾复习,使整个纯C数据结构学习是连贯的,这样更加利于我们的学习和理解以及继续拓展。。代码不负有心人,98加满,向前冲啊🐬🎉🎉🎉以上代码均可运行,所用编译环境为 vs2019 ,运行时注意加上编译头文件#define _CRT_SECURE_NO_WARNINGS 1。......

forever的博客 3015

数据结构--二叉树--详解

本章目录1. 树概念及结构1.1树概念1.2树的表示2. 二叉树概念及结构3. 二叉树顺序结构及概念4. 二叉树链式结构及实现 1. 树概念及结构 1.1树概念 树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 有一个特殊的结点,称为根结点,根节点没有前驱结点。 除根节点外,其余结点被分成是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继。 因此,树是递归定义的

weixin_45796387的博客 13万+

数据结构——二叉树

树是一种非线性的数据结构,它是由个有限结点组成的一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树。——有一个特殊的结点,称为,根节点没有前驱结点。——除了根结点之外,其余结点被分为M个互不相交的集合,其中每一个集合又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或者多个后继。因此,树是递归定义的。——树形结构中,⼦树之间不能有交集,否则就不是树形结构。例如:(注:该图片来自于百度)

2406_83392683的博客 3997

树与二叉树的存储与遍历

树与二叉树

m0_67768006的博客 2050

【数据结构】二叉树(概念、性质、存储、遍历、构造全解 | C++实现)

大家好!我是LKN。在计算机科学中,“树”是一种极其重要的数据结构,而“二叉树”则是树中之王。它不仅是后续学习BST、AVL树、红黑树、B/B+树的基础,其本身(如堆)和其思想(如递归、分治)也贯穿了整个算法领域。 很多同学在学习二叉树时,会“死”在遍历上,尤其是非递归遍历。本文将用近万字的篇幅,从最基础的概念出发,带你彻底攻克二叉树。

2401_85872527的博客 1312

深入解析二叉树:结构、分类与遍历方法

二叉树(Binary Tree) 是每个节点最多有两个子节点的树结构。这两个子节点分别称为左子节点和右子节点。二叉树与普通树不同,二叉树的每个节点的子树分为左子树和右子树,即使只有一个子节点,也需要区分是左子节点还是右子节点。

TENET123的博客 2583
上一篇: pytorch中torch.transpose()与torch.tensor.permute()的区别
下一篇: 【数据结构】 双循环链表空间逆置
RealWeakCoder
博客等级 码龄7年 236粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值