二叉排序树怎么写的

二叉排序树(BST)是一种特殊的二叉树,它允许快速查找、插入和删除元素。下面是二叉排序树的基本定义和构造方法:

二叉排序树定义

二叉排序树或者是空树,或者是满足以下性质的二叉树:

1. 若左子树非空,则左子树上所有节点的值均小于或等于根节点的值;

2. 若右子树非空,则右子树上所有节点的值均大于或等于根节点的值;

3. 左、右子树本身也分别是一棵二叉排序树。

二叉排序树构造

构造二叉排序树通常采用陆续插入结点的方法:

1. 将待排序的数据序列的第一个数据作为根结点;

2. 对后续数据,逐个插入结点,新数据结点作为叶子结点插入到合适的位置,保持树的结构满足二叉排序树性质。

二叉排序树基本操作

查找:

若二叉排序树非空,将给定值与根结点的值比较,相等则查找成功;

若不等,根据比较结果在左子树或右子树中查找。

代码示例

```c

include

include

// 定义二叉排序树结点结构体

typedef struct BSTNode {

int key;

struct BSTNode *left, *right;

} BSTNode, *BSTree;

// 在二叉排序树中查找值为key的结点

BSTNode *BST_Search(BSTree T, int key) {

while (T != NULL && key != T->key) {

if (key < T->key)

T = T->left;

else

T = T->right;

}

return T;

}

// 插入新元素到二叉排序树中

BSTNode *BST_Insert(BSTree T, int val) {

if (T == NULL) {

BSTNode *node = (BSTNode *)malloc(sizeof(BSTNode));

node->key = val;

node->left = node->right = NULL;

return node;

}

if (val < T->key)

T->left = BST_Insert(T->left, val);

else if (val > T->key)

T->right = BST_Insert(T->right, val);

return T;

}

int main() {

BSTree T = NULL;

T = BST_Insert(T, 5);

T = BST_Insert(T, 3);

T = BST_Insert(T, 7);

T = BST_Insert(T, 1);

T = BST_Insert(T, 9);

BSTNode *result = BST_Search(T, 7);

if (result != NULL)

printf("Found key: %dn", result->key);

else

printf("Key not foundn");

return 0;

}

以上代码展示了如何创建一个二叉排序树,并实现了一个简单的查找功能。您可以根据需要扩展此代码以包含插入、删除等其他操作

本文来自作者[fujianzhongyixueyuan]投稿,不代表公众科技网立场,如若转载,请注明出处:https://www.cpst.net.cn/xueli/3464956.html

赞 (0)

发表回复

本站作者后才能评论

评论列表(4条)

  • fujianzhongyixueyuan
    fujianzhongyixueyuan 2026年10月06日

    我是公众科技网的签约作者“fujianzhongyixueyuan”!

  • fujianzhongyixueyuan
    fujianzhongyixueyuan 2026年10月06日

    希望本篇文章《二叉排序树怎么写的》能对你有所帮助!

  • fujianzhongyixueyuan
    fujianzhongyixueyuan 2026年10月06日

    本站[公众科技网]内容主要涵盖:教育咨询,知识百科

  • fujianzhongyixueyuan
    fujianzhongyixueyuan 2026年10月06日

    本文概览:二叉排序树(BST)是一种特殊的二叉树,它允许快速查找、插入和删除元素。下面是二叉排序树的基本定义和构造方法: 二叉排序树定义二叉排序树或者是空树,或者是满足以下性质的二叉树:1. 若左子树非空,则左子树上所有节点的值均小于或等于根节点的值

联系我们

联系:143 0457 151

工作时间:周一至周五,9:30-18:30,节假日休息

关注我们