struct b_node* search_bst(struct b_node* node, int data) {
	if (node == NULL) {
	//Nonexisting node - return NULL
		return NULL;
	}
	if (node-> value == data) {
	//Found the correct value
		return node;
	}
	if (node->value > data) {
	//Data being searched is too small, has to be in 
	//left subtree 
		return search_bst(node-> left, data);
	}

	if(node->value < data) {
	//Data is too big has to be in ln
	//right subtree 
		return search_bst(node->right, data);
	}

	//We have covered all three comparison cases, so reaching 
	//here is only possible with error
	return NULL;
}
示例#2
0
int search_bst(BiTree T, int value, BiTree father, BiTree *p){
    if (!T){
	*p = father;
	return 0;
    }
    else if (value == T->data){
	*p = T;
	return 1;
    }
    else if (value < T->data)
	return search_bst(T->lchild, value, T, p);
    else 
	return search_bst(T->rchild, value, T, p);
}
bool delete_bst(node_pointer_t root, int data) {
  node_pointer_t tmp_node = NULL;
  node_pointer_t pre_node = NULL;
  node_pointer_t max_node = NULL;
  
  tmp_node = search_bst(root, data);
  pre_node = search_parent(root, data);

  if(tmp_node->rchild&&tmp_node->lchild) {
    pre_node = tmp_node;
    max_node = tmp_node->lchild;
    while(max_node->rchild) {
      pre_node = max_node;
      max_node = max_node->rchild;
    }
    tmp_node->data = max_node->data;
    if(pre_node->rchild->data == max_node->data) pre_node->rchild = max_node->lchild;
    else pre_node->lchild = max_node->lchild;
    free(max_node);
  } else if((max_node = tmp_node->rchild)||(max_node = tmp_node->lchild)) {
    if(pre_node->rchild&&pre_node->rchild->data == data) pre_node->rchild = max_node;
    else pre_node->lchild = max_node;
    free(tmp_node);
  } else {
    if(pre_node->rchild&&pre_node->rchild->data == data) pre_node->rchild = NULL;
    else pre_node->lchild = NULL;
    free(tmp_node);
  }
  return true;
}
示例#4
0
binaryTreeNode* search_bst(binaryTreeNode ** tree,binaryTreeElementT value)
{
    if(!(*tree))
    {
       return NULL;
    }
    if((*tree)->value==value){
        return *tree;
    }else if((*tree)->value>value)
    {
        return  search_bst(&(*tree)->left, value);
    }else
    {
        return search_bst(&(*tree)->right, value);
        
    }
}
示例#5
0
int insert_bst(BiTree *T, int value){
    BiTree p,s;
    if (!search_bst(*T, value, NULL, &p)){
	s = (BiTree)malloc(sizeof(BiTNode));
	s->data = value;
	s->lchild = s->rchild = NULL;
	if (!p)
	    *T = s;
	else if (value < p->data)
	    p->lchild = s;
	else 
	    p->rchild = s;
	return 1;
    }
    else 
	return 0;
}
示例#6
0
int retrieve(char *com1,char *com2)
{
	FILE *fp;
	char buffer[200];
	int k=0,j=0,offset;
	extern int count;	
	char *temp,*temp1,*temp3;
	bst_node *search;
	temp=strtok(com2,"=");
	temp1=strtok(NULL,"\n");
	if((search=search_bst(cdsdetail.rootNode,temp1))==NULL)
	{
		printf("%s\n",ERR_CDS_RETRIEVE_DATASTORE_02);
		return 0;		
	}	
	offset=(search->offset)-1;
	//if(search->flag==1)return 0;
	strcat(com1,",");
	temp3=strtok(com1,",");
	fp=fopen(com1,"rb");
	strcpy(buffer,SUCCESS_CDS_RETRIEVE_DATASTORE_00);	
	retrieveFromFile(com1,offset,fp,buffer);
	fclose(fp);
	while(com1!=NULL)
	{
		if((com1=strtok(NULL,","))!=NULL)
		{		
			fp=fopen(com1,"rb");	
			strcat(buffer,",");		
			retrieveFromFile(com1,offset,fp,buffer);
			fclose(fp);
			
		}
		else
			break;
		
	}
	printf("%s\n",buffer);	
	return 1;
}
bool insert_bst(node_pointer_t *root, int data) {
  node_pointer_t tmp_node = NULL;
  node_pointer_t new_node = NULL;

  tmp_node = search_bst(*root, data);
  if(tmp_node) { 
    fprintf(stderr, " ERROR: same data already exist\n");
    return false;
  }
  new_node = get_new_node(data);
  if(!new_node) {
    fprintf(stderr, " ERROR: memory is full\n");
    return false;
  }
  if(!*root) {
    *root = new_node;
    return true;
  }
  tmp_node = search_parent(*root, data);
  if(tmp_node->data < data) tmp_node->rchild = new_node;
  else if(tmp_node->data > data) tmp_node->lchild = new_node;
  return true;
}
示例#8
0
文件: main.c 项目: dgyx105/learngit
int main()
{
    int i, key;
    link root = NULL;
    srand(time(NULL));
    for (i = 0; i < N; i++)
        root = insert_bst(root, rand() % RANGE);

    printf("\t\\tree");
    print_bst(root);
    printf("\n\n");
    while (root) {
        key = rand() % RANGE;
        if (search_bst(root, key)) {
            printf("delete %d in tree\n", key);
            root = delete_bst(root, key);
            printf("\t\\tree");
            print_bst(root);
            printf("\n\n");
        }
    }
    
    return 0;
}