C 语言代码示例,展示了如何实现一个简单的二叉搜索树(Binary Search Tree): #include <stdio.h> #include <stdlib.h>

2023-10-16 08:57:16 浏览数 (3)

C 语言代码示例,展示了如何实现一个简单的二叉搜索树(Binary Search Tree):

代码语言:javascript复制
#include <stdio.h>
#include <stdlib.h>

// 二叉搜索树节点结构体
typedef struct Node {
    int data;
    struct Node* left;
    struct Node* right;
} Node;

// 创建新节点
Node* createNode(int data) {
    Node* newNode = malloc(sizeof(Node));
    if (newNode == NULL) {
        perror("Memory allocation failed");
        exit(EXIT_FAILURE);
    }
    
    newNode->data = data;
    newNode->left = newNode->right = NULL;
    
    return newNode;
}

// 插入节点
Node* insertNode(Node* root, int data) {
    if (root == NULL) {
        return createNode(data);
    }
    
    if (data < root->data) {
        root->left = insertNode(root->left, data);
    } else if (data > root->data) {
        root->right = insertNode(root->right, data);
    }
    
    return root;
}

// 中序遍历
void inOrderTraversal(Node* root) {
    if (root != NULL) {
        inOrderTraversal(root->left);
        printf("%d ", root->data);
        inOrderTraversal(root->right);
    }
}

int main() {
    Node* root = NULL;
    
    // 插入节点
    root = insertNode(root, 5);
    root = insertNode(root, 3);
    root = insertNode(root, 8);
    root = insertNode(root, 1);
    root = insertNode(root, 4);
    root = insertNode(root, 7);
    root = insertNode(root, 9);
    
    // 中序遍历并打印结果
    printf("中序遍历结果:");
    inOrderTraversal(root);
    printf("n");
    
    return 0;
}

上述代码中,我们定义了一个二叉搜索树节点结构体 Node,每个节点包含一个整型数据 data,以及左子树和右子树的指针。我们实现了以下几个函数:

  • createNode:用于创建一个新的节点,并初始化数据和指针。
  • insertNode:用于向二叉搜索树中插入新节点。若插入的数据小于当前节点的数据,则将其插入到左子树;若大于,则插入到右子树。
  • inOrderTraversal:用于进行中序遍历,按照节点的顺序打印数据。

main 函数中,我们创建了一个空的二叉搜索树 root,并插入一些节点。最后,我们进行中序遍历,并打印结果。

请注意,这只是一个相对复杂的示例代码,演示了如何实现一个简单的二叉搜索树。在实际编写代码时,根据具体需求考虑不同类型的树结构以及相关操作,并谨慎处理内存分配和释放,以避免内存泄漏和其他问题。

0 人点赞