首页 > 其他分享 >数据结构-二叉树的初始化

数据结构-二叉树的初始化

时间:2024-04-29 21:01:20浏览次数:29  
标签:初始化 NULL BSTnode Proot 二叉树 New 数据结构 Root 节点

数据结构-二叉树的相关初始化

/*************************************************
/**
  * @file name:	DcirLLinkInsert
  * @brief  对双向循环链表插入的功能实现
  * @author [email protected]
  * @date 2024/04/29
  * @version 1.0 :在下坂本,有何贵干 
  * @property :none
  * @note  :this is xuange's note
 *
 **************************************************/
//创建一个带根节点的BST树,对BST树的根节点进行初始化
BSTnode_t * BSTree_Create(DataType_t KeyVal)
{
	//1.创建一个根结点并对根结点申请内存
	BSTnode_t *Root = (BSTnode_t *)calloc(1,sizeof(BSTnode_t));
	if (NULL == Root)
	{
		perror("Calloc memory for Root is Failed");
		exit(-1);
	}

	//2.对根结点进行初始化,根节点的2个指针域分别指向NULL
	Root->data = KeyVal;
	Root->lchild = NULL;
	Root->rchild = NULL;

	//3.把根结点的地址返回即可
	return Root;
}

//创建新的结点,并对新结点进行初始化(数据域 + 指针域)
BSTnode_t * BSTree_NewNode(DataType_t KeyVal)
{
	//1.创建一个新结点并对新结点申请内存
	BSTnode_t *New = (BSTnode_t *)calloc(1,sizeof(BSTnode_t));
	if (NULL == New)
	{
		perror("Calloc memory for NewNode is Failed");
		return NULL;
	}

	//2.对新结点的数据域和指针域(2个)进行初始化
	New->data = KeyVal;
	New->lchild = NULL;
	New->rchild = NULL;

	return New;
}


/*************************************************
/**
 * @function name:	BSTree_InsertNode
  * @brief  对二叉树进行进行插入操作
  * @param  Root:跟结点 KeyVal:键值
  * @retval 函数返回类型为bool型
  * @date 2024/04/29
  * @version 1.0 :在下坂本,有何贵干 
  * @note   none
 **************************************************/
//向BST树中加入节点   规则:根节点的左子树的键值都是比根节点小的,根节点的右子树的键值都是比根节点大的
bool BSTree_InsertNode(BSTnode_t *Root,DataType_t KeyVal)
{

	//为了避免根节点地址丢失,所以需要对地址进行备份
	BSTnode_t *Proot = Root;


	//1.创建新节点并对新结点进行初始化
	BSTnode_t * New = BSTree_NewNode(KeyVal);
	if (NULL == New)
	{
		printf("Create NewNode Error\n");
		return false;
	}

	//2.此时分析当前的BST树是否为空树,有2种情况(空树 or 非空树)
	if (NULL == Root)
	{
		//此时BST树为空树,则直接把新节点作为BST树的根节点
		Root = New;
	}
	else
	{
		while(Proot)
		{
			
			//新节点的键值和根节点的键值进行比较,如果相等则终止函数
			if (Proot->data == New->data)
			{
				printf("Can Not Insert,.....\n");
				return false;
			}
			//新节点的键值和根节点的键值进行比较,如果不相等继续分析
			else
			{
				//新节点的键值小于根节点的键值,则把根节点的左子树作为新的根
				if( New->data < Proot->data )
				{
					if (Proot->lchild == NULL)
					{
						Proot->lchild = New;
						break;
					}

					Proot = Proot->lchild;

				}
				else
				{
					if (Proot->rchild == NULL)
					{
						Proot->rchild = New;
						break;
					}

					Proot = Proot->rchild;
				}
			}
		}

	}

	return true;
}

标签:初始化,NULL,BSTnode,Proot,二叉树,New,数据结构,Root,节点
From: https://www.cnblogs.com/luo-tt/p/18166639

相关文章

  • 构造函数的成员初始化列表
    为什么要初始化成员对于类成员是基础数据类型,例如int、char这些,构造对象时,成员不会被初始化,值是随机的。下面代码可以验证下:classA{public:A(){}voidshowMember()const{std::cout<<"a:"<<a<<std::endl;}private:inta;};int......
  • python3的数据结构
    一.列表(列表可以修改,字符串和元组不能)list.append(x)-把一个元素添加到列表的结尾-相当于a[len(a):]=[x]list.extend(L)-通过添加指定列表的所有元素来扩充列表-相当于a[len(a):]=Llist.insert(i,x)-在指定位置插入一个元素-a.insert(0,x)会插入到整个列表之前-a.i......
  • .h5ad数据结构解释(anndata 数据格式)
    官方网站:https://anndata.readthedocs.io/en/latest/下面的内容官网都有概述h5ad文件提供了一种可扩展的方式来记录数据及其注释(annotation),主要包含X,obs,var,uns等多个部分,分别存储不同的信息。结构如下图所示X是表达量矩阵,用来联系obs和var。具体来说X是一个稀疏......
  • 数据结构周测错题小结
    小题:1、若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是()A.函数的实参和其对应的形参共占同一存储单元B.形参只是形式上的存在,不占用具体存储单元C.同名的实参和形参占同一存储单元D.函数的形参和实参分别占用不同的存储单元参考答案:D2、假定一个顺序存......
  • 王道数据结构第一章个人向笔记
    目录1.1.0导读1.1.1绪论1.1.2数据结构的三要素逻辑结构数据的运算物理结构(存储结构)1.2.1算法的基本概念1.2.2时间复杂度1.2.3空间复杂度1.1.0导读数据结构在学什么?如何用程序代码把显示世界的问题信息画如何用计算机高效地处理这些信息从而创造价值1.1.1绪论数据......
  • 数据结构与算法学习(1)——BFS(广度优先搜索)
    BFS基础BFS会从根节点开始搜索,在每一个路口面临分叉的时候,先把每个岔路记录下来,然后再去一个一个的往前走一步。节点进行广度优先搜索的顺序题目PS:下列题目均来自leetcode中灵神题单1311.获取你好友已观看的视频......
  • 数据结构_链表_双向循环链表的初始化、插入、删除、修改、查询打印(基于C语言实现)
    版本:2024年4月26日V1.0发布于博客园/***@filename:DoubleLinkedList.c*@brief:实现双向循环链表的相关功能*@author:[email protected]*@date:2024/04/26*@version:1.0*@note:*CopyRight(c)2023-2024RISE_AND......
  • 数据结构——链式栈
    二、链式栈构造链式栈//链式栈的有效数据类型,用户可以根据需要进行修改typedefintDataType_t;//构造单链式栈的结点typedefstructLinkedStack{DataType_tdata;//结点的数据域structLinkedStack*next;//结点的的指针域}LinStack_t......
  • 数据结构(笔试题-栈(入栈出栈)
    笔试题:实现//利用栈s1和s2实现队列,栈的思想是“后进先出”,队列的思想是“先进先出”,可以选择把栈s1作为入队缓存,把栈s2作为出队缓存//入队boolenQueue(s1,s2,intx){ inttemp;//用于存储出栈的元素的值 //1.判断栈s1是否已满,此时分为两种情况(满了or未满) if(s......
  • 数据结构—单链表队列头删尾插
    单链表队列的头删尾插/*************************************************/***@filename: 单链表队列的头删尾插.md*@brief实现对单链表队列的头删尾插*@[email protected]*@date2024/04/26*@version1.0:在下坂本,有何贵干*@property:no......