二叉查找树

title

二叉查找树(Binary Search Tree,简称BST)是一种二叉树,它的每个节点都满足以下条件:

  • 如果一个节点有左子树,则左子树中所有节点的值都小于该节点的值。
  • 如果一个节点有右子树,则右子树中所有节点的值都大于该节点的值。
  • 左右子树都是二叉查找树。

这个性质使得二叉查找树的节点可以按照大小关系被快速地查找、插入和删除。

下面是一个简单的C语言实现二叉查找树的代码:


#include <stdio.h>
#include <stdlib.h>

typedef struct bst_node {
    int value;
    struct bst_node *left;
    struct bst_node *right;
} bst_node;

bst_node *bst_insert(bst_node *node, int value) {
    if (node == NULL) {
        bst_node *new_node = (bst_node *)malloc(sizeof(bst_node));
        new_node->value = value;
        new_node->left = NULL;
        new_node->right = NULL;
        return new_node;
    } else if (value < node->value) {
        node->left = bst_insert(node->left, value);
    } else if (value > node->value) {
        node->right = bst_insert(node->right, value);
    }
    return node;
}

void bst_traverse(bst_node *node) {
    if (node == NULL) {
        return;
    }
    bst_traverse(node->left);
    printf("%d ", node->value);
    bst_traverse(node->right);
}

void bst_destroy(bst_node *node) {
    if (node == NULL) {
        return;
    }
    bst_destroy(node->left);
    bst_destroy(node->right);
    free(node);
}

int main() {
    bst_node *root = NULL;
    int i;
    int data[10] = { 4, 2, 6, 1, 3, 5, 7, 8, 9, 0 };
    for (i = 0; i < 10; i++) {
        root = bst_insert(root, data[i]);
    }
    bst_traverse(root);
    printf("\n");
    bst_destroy(root);
    return 0;
}

这个代码实现了二叉查找树的插入、遍历和销毁操作。在插入时,如果节点为空,则创建一个新节点,否则根据节点的大小关系递归地插入到左子树或右子树中。在遍历时,先遍历左子树,然后输出节点的值,最后遍历右子树。在销毁时,先销毁左子树和右子树,然后释放节点的内存。

powered by Gitbook© 2023 编外计划 | 最后修改: 2023-11-24 03:37:00

results matching ""

    No results matching ""