두 갈래 찾기 트 리 (두 갈래 정렬 트 리) 생 성, 삽입, 삭제, 찾기 - C 언어
9662 단어 데이터 구조
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define N 7 //
/* */
typedef int Elemtype;
typedef struct BSTNode
{
Elemtype data;
struct BSTNode *lchild,*rchild;
}BSTNode,*PNode;
// , data true, false
bool SearchBST(PNode T,Elemtype data)
{
if(T == NULL)
return false;
if(data < T->data)
return SearchBST(T->lchild,data);
else if(data > T->data)
return SearchBST(T->rchild,data);
else
return true;
}
// , ,
PNode insertBST(Elemtype data,PNode root)
{
if(root == NULL)
{
root = (PNode)malloc(sizeof(BSTNode));
root->data = data;
root->lchild = NULL;
root->rchild = NULL;
printf("%d
",data);
return root;
}
if(data < root->data)
root->lchild = insertBST(data,root->lchild);
else if(data > root->data)
root->rchild = insertBST(data,root->rchild);
else
printf("%d , !!!
",data);
return root;
}
// 、 ; ,
// , ,
PNode findMin(PNode root)
{
if(root == NULL)
return NULL;
else if(root->lchild == NULL)
return root;
return findMin(root->lchild); //
}
PNode findMax(PNode root)
{
if(root != NULL) //
while(root->rchild != NULL)
root = root->rchild;
return root;
}
// : ; ,
// , ;
// ,
//
PNode deleteBST(PNode root,Elemtype data)
{
if(root == NULL)
return root;
if(data < root->data)
root->lchild = deleteBST(root->lchild,data);
else if(data > root->data)
root->rchild = deleteBST(root->rchild,data);
else if(root->lchild != NULL && root->rchild != NULL)
{
root->data = findMin(root->rchild)->data;
root->rchild = deleteBST(root->rchild,root->data);
}
else
root = (root->lchild != NULL) ? root->lchild : root->rchild;
return root;
}
// :
void print(PNode root)
{
if(root!=NULL)
{
print(root->lchild);
printf("%d ",root->data);
print(root->rchild);
}
}
int main(int argc, char *argv[]) {
Elemtype data[N] = {45,24,53,45,12,24,90};
int i;
PNode root = NULL; //
for(i=0;i[i],root);
}
print(root);
printf("
");
root = insertBST(55,root);
print(root);
printf("
");
root = deleteBST(root,24);
print(root);
printf("
");
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.