建立二叉排序树(c语言实现)

二叉排序树(Binary Search Tree,BST)是一种二叉树,它满足以下条件:

  1. 对于每个节点,它的左子树中所有节点的值小于它本身的值。

  2. 对于每个节点,它的右子树中所有节点的值大于它本身的值。

  3. 左子树和右子树都是二叉排序树。

    void buildpaixutree(tree* t, int x)
    {
    if (*t == NULL)
    {
    t = (treenode)malloc(sizeof(treenode));
    (*t)->data = x;
    (*t)->lchild = NULL;
    (*t)->rchild = NULL;
    }
    else if ((*t)->data < x)
    {
    buildpaixutree(&((*t)->rchild), x);
    }
    else if ((*t)->data > x)
    {
    buildpaixutree(&((*t)->lchild), x);
    }
    }

二叉排序树的主要应用是实现快速查找和排序。在一个二叉排序树中,每个节点都可以看作是一个"桶",存储了一个关键字和对应的值。通过比较关键字的大小,可以快速定位到某个节点,并进行插入、删除和查找操作。另外,对二叉排序树进行中序遍历,可以得到关键字的有序序列,从而实现排序功能。

二叉排序树的缺点是它的形态高度依赖于插入顺序,如果插入的数据是有序的,那么二叉排序树将会退化成一条链表,查找效率大大降低。为了避免这个问题,常见的做法是使用平衡二叉树,如AVL树、红黑树等。

完整测试代码

复制代码
#include<stdio.h>  
#include<stdlib.h> 
#include<time.h>
typedef struct treenode
{
	int data;
	struct treenode* lchild, * rchild;
}treenode, * tree;
void buildpaixutree(tree* t, int x)
{
	if (*t == NULL)
	{
		*t = (treenode*)malloc(sizeof(treenode));
		(*t)->data = x;
		(*t)->lchild = NULL;
		(*t)->rchild = NULL;
	}
	else if ((*t)->data < x)
	{
		buildpaixutree(&((*t)->rchild), x);
	}
	else if ((*t)->data > x)
	{
		buildpaixutree(&((*t)->lchild), x);
	}
}
void paixu(tree* t)
{
	int i = 0;
	int a = 0;
	srand(time(0));
	for (i = 0; i < 10; i++)
	{	
		buildpaixutree(t,rand()%100);
	}
}
void disp(tree* t)
{
	if (*t)
	{
		disp(&(*t)->lchild);
		printf("%d ", (*t)->data);
		disp(&(*t)->rchild);
	}
}

int main()
{
	tree t = NULL;
	paixu(&t);
	printf("二叉树排序树为:");
	disp(&t);
	return 0;
}
相关推荐
徐小夕9 小时前
花了一周,3亿tokens,我开源了一款 Word 文档智能审查平台,文稿自动质检+可视化分析,告别低效人工审核
前端·算法·github
可编程芯片开发10 小时前
UPFC统一潮流控制器的simulink建模与仿真
算法
小小仙子11 小时前
矢量网络分析仪如何测试S参数的?
人工智能·算法·机器学习
code bean12 小时前
【C#】 `Channel<T>` 深度解析:生产者-消费者模式的现代解法
数据结构·c#
中微极客12 小时前
降维算法75倍加速:从PCA到稀疏字典学习的工程实践
人工智能·学习·算法
storyseek13 小时前
前缀和实现Kogge-Stone算法
数据结构·算法
ziguo112213 小时前
深入浅出 C/C++ 数据类型:从入门到踩坑
linux·c语言·c++·windows·visual studio
元Y亨H13 小时前
开发者必须掌握的十大核心算法
算法
元Y亨H13 小时前
深度解构:数据结构与算法的理论基石与工程演进
数据结构·算法