zoukankan      html  css  js  c++  java
  • C语言实现常用数据结构——二叉查找树

    #include<stdio.h>
    #include<stdlib.h>
    #define SIZE 10
    typedef struct Tree {
        int data;
        struct Tree *left;
        struct Tree *right;
    } tree;
    
    
    
    int find(tree *t,int x) {
        int i=0;
        if(t==NULL) {
            return -1;
        }
        if(t->data==x) {
            return i;
        } else if(x<t->data) {
            i++;
            find(t->left,x);
        } else if(x>t->data) {
            i++;
            find(t->right,x);
        }
    }
    
    tree *findMin(tree *t) {
        if(t==NULL) {
            return NULL;
        } else if(t->left==NULL) {
            return t;
        } else {
            return findMin(t->left);
        }
    }
    
    int findMax(tree *t) {
        if(t!=NULL) {
            while(t->right!=NULL) {
                t=t->right;
            }
        }
        return t->data;
    }
    
    tree *init(tree *t,int x) {
        if(t==NULL) {
            t=malloc(sizeof(tree));
            t->data=x;
            t->left=NULL;
            t->right=NULL;
            return t;
        } else if(t->left ==NULL) {
            t->left=init(t->left,x);
            return t;
        } else {
            t->right=init(t->right,x);
    
            return t;
        }
    }
    
    
    
    tree *insertSort(tree *t,int x) {
        if(t==NULL) {
            t=malloc(sizeof(tree));
            t->data=x;
            t->left=NULL;
            t->right=NULL;
        } else if(x < t->data) {
            t->left=insertSort(t->left,x);
        } else if(x > t->data) {
            t->right=insertSort(t->right,x);
        }
        return t;
    }
    
    
    tree *delete(tree *t,int x) {
        tree *temp;
        if(t==NULL) {
            printf("error,element not found!");
        } else if( x < t->data ) {/*go left*/
            t->left=delete(t->left,x);
        } else if( x > t->data ) {/*go right*/
            t->right=delete( t->right,x );
        } else if( t->left && t->right) { /*t->data==x and t has two children*/
            temp=findMin( t->right );
            t->data=temp->data;
            t->right=delete( t->right,t->data );
        } else {/*one or zero children */
            temp=t;
            if( t->left==NULL) {
                t=t->right;
            } else if( t->right == NULL ) {
                t=t->left;
            }
            free(temp);
        }
        return t;
    }
    
    void preTravel(tree *t) {
        if(t==NULL) {
            return;
        }
        printf("%d ",t->data);
        preTravel(t->left);
        preTravel(t->right);
    }
    
    void midTravel(tree *t) {
        if(t==NULL) {
            return;
        }
        midTravel(t->left);
        printf("%d ",t->data);
        midTravel(t->right);
    }
    
    void postTravel(tree *t) {
        if(t==NULL) {
            return;
        }
        postTravel(t->left);
        postTravel(t->right);
        printf("%d ",t->data);
    }
    
    main() {
        tree *t;
        int i;
        for(i=0; i<SIZE; i++) {
            t=init(t,i);
        }
        preTravel(t);
        printf("
    ");
        midTravel(t);
        printf("
    ");
        postTravel(t);
    }
  • 相关阅读:
    QT 手式编译步骤
    Linux QT 连接 Sqlite数据库
    JDK_1.8的Windows和Linux环境下的下载与安装
    聚焦BPM弹窗
    SQL查重去重
    sql函数使用
    SQL游标
    转载:《TypeScript 中文入门教程》 2、枚举
    《TypeScript 中文入门教程》 1、基础数据类型
    转载:《TypeScript 中文入门教程》
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/9593678.html
Copyright © 2011-2022 走看看