建立二叉排序树(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;
}
相关推荐
IT猿手9 分钟前
超多目标优化:基于导航变量的多目标粒子群优化算法(NMOPSO)的无人机三维路径规划,MATLAB代码
人工智能·算法·机器学习·matlab·无人机
Erik_LinX18 分钟前
算法日记25:01背包(DFS->记忆化搜索->倒叙DP->顺序DP->空间优化)
算法·深度优先
Alidme25 分钟前
cs106x-lecture14(Autumn 2017)-SPL实现
c++·学习·算法·codestepbystep·cs106x
小王努力学编程26 分钟前
【算法与数据结构】单调队列
数据结构·c++·学习·算法·leetcode
最遥远的瞬间28 分钟前
15-贪心算法
算法·贪心算法
LaoZhangGong12339 分钟前
STM32的“Unique device ID“能否修改?
c语言·经验分享·stm32·单片机·嵌入式硬件
万兴丶1 小时前
Unity 适用于单机游戏的红点系统(前缀树 | 数据结构 | 设计模式 | 算法 | 含源码)
数据结构·unity·设计模式·c#
维齐洛波奇特利(male)1 小时前
(动态规划 完全背包 **)leetcode279完全平方数
算法·动态规划
程序员东min1 小时前
数据结构:实验题目:单链表归并。将两个非递减次序排列的单链表归并为一个非递增次序排列的单链表,并计算表长。要求利用原来两个单链表的结点存放合并后的单链表。
数据结构
黄雪超2 小时前
深入HBase——核心组件
数据结构·数据库·hbase