数据冒险之二叉树(数组)

2023-12-27 09:08
文章标签 二叉树 数据 数组 冒险

本文主要是介绍数据冒险之二叉树(数组),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Tree.h

#ifndef TREE_H
#define TREE_H
//数组实现
class Tree
{
public:Tree(int size, int *pRoot);                              //创建树   ~Tree();                                                 //销毁树 int *SearchNode(int nodeIndex);                            //根据索引寻找节点 bool AddNode(int nodeIndex, int direction, int *pNode);  //添加节点 bool DeleteNode(int nodeIndex, int *pNode);             //删除节点 void TreeTraverse();                                   //遍历private:int *m_pTree;int m_iSize;
};
#endif

Tree.cpp

#include<iostream>
#include"Tree.h"
using namespace std;
Tree::Tree(int size, int *pRoot)             //创建树   
{m_iSize = size;m_pTree = new int[size];for (int i = 0; i < size; i++){m_pTree[i] = 0;}m_pTree[0] = *pRoot;
}Tree::~Tree()                                           //销毁树 
{delete[]m_pTree;m_pTree = NULL;}
int *Tree::SearchNode(int nodeIndex)                            //根据索引寻找节点 
{if (nodeIndex < 0 || nodeIndex >= m_iSize)     //判断结点的合法性{return NULL;}if (m_pTree[nodeIndex]==0)               {return NULL;}return &m_pTree[nodeIndex];
}bool Tree::AddNode(int nodeIndex, int direction, int *pNode)  //添加节点 
{if (nodeIndex < 0 || nodeIndex >= m_iSize){return false;}if (m_pTree[nodeIndex] == 0){return false;}if (direction==0)     //0代表左边{if (2 * nodeIndex + 1 >= m_iSize){return false;}if (m_pTree[2 * nodeIndex + 1] != 0)    //已经有了左结点{return false;}m_pTree[2 * nodeIndex + 1] = *pNode;}if (direction == 1)     //1代表右边{if (2 * nodeIndex + 2 >= m_iSize){return false;}if (m_pTree[2 * nodeIndex + 2] != 0)    //已经有了右结点{return false;}m_pTree[2 * nodeIndex + 2] = *pNode;}return true;
}
bool Tree::DeleteNode(int nodeIndex, int *pNode)             //删除节点 
{if (nodeIndex < 0 || nodeIndex >= m_iSize)  {return false;}if (m_pTree[nodeIndex] == 0)        //结点不存在{return false;}*pNode = m_pTree[nodeIndex];m_pTree[nodeIndex] = 0;   //删掉结点return true;
}
void Tree::TreeTraverse()                               //遍历
{for (int i = 0; i < m_iSize; i++){cout << m_pTree[i] << " ";}}

main.cpp

#include<iostream>
#include"Tree.h" 
using namespace std;
/*****************************************/
/* 二叉树(数组表示)关于数据与树之间的算法转换int tree[n] 3 5 8 2 6 9 73(0)5(1)              8(2)2(3)      6(4)     9(5)         7(6)结论:
父亲节点下标*2+1 为该节点左孩子的下标
父亲节点下标*2+2 为该节点右孩子的下标
*/
int main()
{int root = 3;Tree *pTree = new Tree(10,&root);int node1 = 5;int node2 = 8;pTree->AddNode(0, 0, &node1);pTree->AddNode(0, 1, &node2);int node3 = 2;int node4 = 6;pTree->AddNode(1, 0, &node3);pTree->AddNode(1, 1, &node4);int node5 = 9;int node6 = 7;pTree->AddNode(2, 0, &node5);pTree->AddNode(2, 1, &node6);pTree->TreeTraverse();int node = 0;pTree->DeleteNode(6, &node);cout << endl << "删除的结点node=" << node << endl;pTree->TreeTraverse();int *p=pTree->SearchNode(2);    //搜寻下标为2的结点cout <<endl<< "下标为2的结点node="<< *p << endl;delete pTree;return 0;
}


这篇关于数据冒险之二叉树(数组)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/542620

相关文章

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

Python实现将实体类列表数据导出到Excel文件

《Python实现将实体类列表数据导出到Excel文件》在数据处理和报告生成中,将实体类的列表数据导出到Excel文件是一项常见任务,Python提供了多种库来实现这一目标,下面就来跟随小编一起学习一... 目录一、环境准备二、定义实体类三、创建实体类列表四、将实体类列表转换为DataFrame五、导出Da

Python实现数据清洗的18种方法

《Python实现数据清洗的18种方法》本文主要介绍了Python实现数据清洗的18种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1. 去除字符串两边空格2. 转换数据类型3. 大小写转换4. 移除列表中的重复元素5. 快速统

Python数据处理之导入导出Excel数据方式

《Python数据处理之导入导出Excel数据方式》Python是Excel数据处理的绝佳工具,通过Pandas和Openpyxl等库可以实现数据的导入、导出和自动化处理,从基础的数据读取和清洗到复杂... 目录python导入导出Excel数据开启数据之旅:为什么Python是Excel数据处理的最佳拍档

在Pandas中进行数据重命名的方法示例

《在Pandas中进行数据重命名的方法示例》Pandas作为Python中最流行的数据处理库,提供了强大的数据操作功能,其中数据重命名是常见且基础的操作之一,本文将通过简洁明了的讲解和丰富的代码示例,... 目录一、引言二、Pandas rename方法简介三、列名重命名3.1 使用字典进行列名重命名3.编

Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南

《Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南》在日常数据处理工作中,我们经常需要将不同Excel文档中的数据整合到一个新的DataFrame中,以便进行进一步... 目录一、准备工作二、读取Excel文件三、数据叠加四、处理重复数据(可选)五、保存新DataFram