#include <stdio.h>
#include <stdlib.h>
struct treeNode {
int data;
struct treeNode* LChild;
struct treeNode* RChild;
};
struct treeNode* insertNode(struct treeNode* newNode, int data)
{
if(newNode == NULL)
{
newNode = (struct treeNode *)malloc(sizeof(struct treeNode));
newNode->data = data;
newNode->LChild = NULL;
newNode->RChild = NULL;
return newNode;
}
if(newNode->data > data)
{
newNode->LChild = insertNode(newNode->LChild, data);
}
else if(newNode->data <= data)
{
newNode->RChild = insertNode(newNode->RChild, data);
}
return newNode;
}
struct treeNode* searchNode(struct treeNode* newNode, int data)
{
if(newNode == NULL)
{
return NULL;
}
else if(newNode->data > data)
{
return searchNode(newNode->RChild, data);
}
else if(newNode->data < data)
{
return searchNode(newNode->LChild, data);
}
else
{
return newNode;
}
}
struct treeNode* findMax(struct treeNode* Node)
{
if(Node == NULL)
{
return NULL;
}
if(Node->RChild != NULL)
{
return findMax(Node->RChild);
}
return Node;
}
struct treeNode* findMin(struct treeNode* Node)
{
if(Node == NULL)
{
return NULL;
}
if(Node->LChild != NULL)
{
return findMin(Node->LChild);
}
return Node;
}
struct treeNode* deleteNode(struct treeNode* Node, int data)
{
if(Node == NULL)
return Node;
if(Node->data > data)
Node->LChild = deleteNode(Node->LChild, data);
else if(Node->data < data)
Node->RChild = deleteNode(Node->RChild,data);
else if(Node->LChild != NULL && Node->RChild != NULL)
{
Node->data = findMin(Node->RChild)->data;
Node->RChild = deleteNode(Node->RChild, Node->data);
}
else
Node = (Node->LChild != NULL) ? Node->LChild : Node->RChild;
return Node;
}
void InOrder(struct treeNode* root)
{
if(root == NULL)
{
return;
}
InOrder(root->LChild);
printf("%d ", root->data);
InOrder(root->RChild);
}
int main()
{
struct treeNode* root = NULL;
int n, x;
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
scanf("%d", &x);
root = insertNode(root, x);
}
InOrder(root);
printf("\n");
scanf("%d", &x);
root = deleteNode(root, x);
InOrder(root);
return 0;
}
二叉搜索树 C语言实现
最新推荐文章于 2022-10-29 19:49:55 发布