두 갈래 찾기 트 리 (두 갈래 정렬 트 리) 생 성, 삽입, 삭제, 찾기 - C 언어

9662 단어 데이터 구조
이 진 트 리 찾기: 또는 빈 트 리 찾기;또는 다음 과 같은 성질 을 가 진 이 진 트 리: (1) 왼쪽 나무 가 비어 있 지 않 으 면 왼쪽 나무 에 있 는 모든 노드 의 값 은 뿌리 노드 의 값 보다 작 습 니 다.(2) 만약 에 그의 오른쪽 나무 가 비어 있 지 않 으 면 오른쪽 나무의 모든 결점 의 값 은 그의 뿌리 결점 의 값 보다 크다.(3) 좌우 하위 나 무 는 각각 두 갈래 로 나 무 를 찾는다.
#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; }

좋은 웹페이지 즐겨찾기