1、正确做法
/**
* 功能:二叉搜索树
* author:xjp
*/
typedef struct _NODE{
int value;
struct _NODE *left;
struct _NODE *right;
}NODE;
NODE *insertBST(NODE *BST, int value){
//新建一个节点
NODE *tmp = (NODE *)malloc(sizeof(NODE));
tmp->value = value;
tmp->left = NULL;
tmp->right = NULL;
//开始插入
NODE *p = NULL;
NODE *q = BST;
while(q != NULL){ //查询插入点 (q处)
p = q;
if(tmp->value < q->value) {q = q->left;}
else {q = q->right;}
}
if(p == NULL) {BST = tmp;} //空树时,新节点作为根节点
else if(tmp->value < p->value) {p->left = tmp;} //插入新节点(q处)
else {p->right = tmp;}
return BST;
}
void midOrder(NODE *root){ //中序遍历
if(root != NULL){
midOrder(root->left);
printf("%d ", root->value);
midOrder(root->right);
}
}
int main(){
NODE *BST = NULL;
BST=insertBST(BST, 3);
BST=insertBST(BST, 1);
BST=insertBST(BST, 2);
BST=insertBST(BST, 5);
midOrder(BST);
return 0;
}
2、网上搜索了一遍,不下10个网页内容是如下错误程序
/*
* 此程序有问题
*/
void insertBST(NODE *root, int value){
NODE *tmp = NULL;
if(root == NULL){
tmp = (NODE *)malloc(sizeof(NODE));
tmp->value = value;
tmp->left = NULL;
tmp->right = NULL;
root = tmp;
}else{
if(value < root->value){
insertBST(root->left, value);
}else{
insertBST(root->right, value);
}
}
}