二叉搜索树 C语言实现

#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;
}

猜你喜欢

转载自blog.csdn.net/qq_18431031/article/details/105690888