问题描述
【定义】二叉搜索树(binary search tree)是二叉树的一种。 它可能是空的,也可能非空。 如果非空,则满足以下几条属性:
(1) 每个结点(node)都有一个独一无二的整型键值(key)
(2) 非空左子树的键值必须小于其根结点的键值
(3) 非空右子树的键值必须大于其根结点的键值
(4) 左右子树也均为二叉搜索树
输入格式
C
2行
第一行输入结点的总个数n(1<=n<=100)
第二行给出n个各不相同的整数(这些整数不会超过int类型的存储范围),这些整数被空格分隔。
输入样例:
10
32 3 56 4 75 53 33 76 90 2
以下是代码:
#include <stdio.h>
#include <stdlib.h>
// 构建二叉搜索树节点
struct node{
int val;// 关键字
struct node *lchild;// 左孩子
struct node *rchild;// 右孩子
};
void insert(struct node *p, int value){
//如果value小于当前节点的值
if(value < p->val){
//如果左孩子为空
if(p -> lchild == NULL){
struct node *this=(struct node*)malloc(sizeof(struct node));//分配新空间
this->lchild = this->rchild = NULL;
this->val = value;
p -> lchild = this;
return;
}
else
insert(p->lchild, value);//继续往左下寻找
}
//如果value大于当前节点的值
else if(value > p->val){
//如果右孩子为空
if(p -> rchild == NULL){
struct node *this=(struct node*)malloc(sizeof(struct node));//分配新空间
this->lchild = this->rchild = NULL;
this -> val = value;
p -> rchild = this;
return;
}
else
insert(p->rchild, value);//继续往右下寻找
}
//相等的情况
else
return;
}
int main() {
int num, value;
struct node *head=(struct node*)malloc(sizeof(struct node));//分配新空间
head->lchild = head->rchild = NULL; //初始化头节点
scanf("%d", &num);
head -> val = value;
//插入(num-1)个值
for(int i = 1; i < num; i++){
scanf("%d", &value);
insert(head, value);
}
return 0;
}
此时,一个BST就已经构建好了,头节点为head~~