数据结构-二叉树的相关初始化
/*************************************************
/**
* @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