什么是BST?

就是在树结构中,所有的左子树都比根节点小,所有的右子树都比根节点大。性质也是递归的

二叉排序树(BST)_树结构

先序排列结果:5 2 1 4 7 6 8

代码实现:

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

typedef struct TreeNode
{
int data;
struct TreeNode* lchild, * rchild;
}TreeNode;

//查找
TreeNode* bstSearch(TreeNode* T, int key)
{
if (T)
{
if (T->data == key)//相等就是找到了
{
return T;
}
else if (T->data < key)//比根节点大就向右找
{
return bstSearch(T->rchild,key);
}
else//否则就向左找
{
return bstSearch(T->lchild, key);
}
}
else
{
return NULL;
}
}

//创建
void bstInsert(TreeNode** T, int key)
{
if (*T == NULL)
{
*T = (TreeNode*)malloc(sizeof(TreeNode));
(*T)->data = key;
(*T)->lchild = NULL;
(*T)->rchild = NULL;
}
else if (key == (*T)->data)
{
return;
}
else if (key < (*T)->data)//key小于T的值就向左查找位置
{
bstInsert(&(*T)->lchild, key);
}
else if (key > (*T)->data)
{
bstInsert(&(*T)->rchild, key);
}
}
//先序遍历
void preOrder(TreeNode* T)
{
if (T)
{
printf("%d ", T->data);
preOrder(T->lchild);
preOrder(T->rchild);
}
}

int main()
{
TreeNode* T = NULL;
int nums[7] = { 5,7,8,6,2,4,1 };
for (int i = 0; i < 7; i++)
{
bstInsert(&T, nums[i]);
}
preOrder(T);
printf("\n");
}

打印结果:

二叉排序树(BST)_子树_02