建立二叉排序树(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;
}
相关推荐
潼心1412o3 分钟前
C语言(长期更新)第15讲 指针详解(五):习题实战
c语言·开发语言
梁辰兴1 小时前
数据结构:排序
数据结构·算法·排序算法·c·插入排序·排序·交换排序
野犬寒鸦1 小时前
力扣hot100:搜索二维矩阵 II(常见误区与高效解法详解)(240)
java·数据结构·算法·leetcode·面试
菜鸟得菜1 小时前
leecode kadane算法 解决数组中子数组的最大和,以及环形数组连续子数组的最大和问题
数据结构·算法·leetcode
楼田莉子2 小时前
C++算法专题学习——分治
数据结构·c++·学习·算法·leetcode·排序算法
一支鱼2 小时前
leetcode常用解题方案总结
前端·算法·leetcode
ulias2123 小时前
各种背包问题简述
数据结构·c++·算法·动态规划
m0_570466413 小时前
代码随想录算法训练营第二十八天 | 买卖股票的最佳实际、跳跃游戏、K次取反后最大化的数组和
java·开发语言·算法
吃着火锅x唱着歌3 小时前
LeetCode 1537.最大得分
算法·leetcode·职场和发展
数模加油站3 小时前
25高教社杯数模国赛【C题超高质量思路+可运行代码】第十弹
算法·数学建模·数模国赛·高教社杯全国大学生数学建模竞赛