二叉搜索树

来源:互联网 发布:思科交换机各端口意思 编辑:程序博客网 时间:2024/05/23 21:22
#include <iostream>#include <vector>using namespace std;typedef struct node{    int data;    struct node* lchild;    struct node* rchild;} Node,*pNode;void insert_sbt(pNode &T, int data){    if(T==NULL){        T=(pNode)malloc(sizeof(Node));        T->data=data;        T->lchild=T->rchild=NULL;    }    else if(T->data<data) insert_sbt(T->rchild, data);    else insert_sbt(T->lchild, data);//这个是传的引用,所以可以保留修改。}//插入那里用传引用比较方便,这里删除就不要用传递引用了,对二叉树加一个头指针,删除操作清晰明了。void del_node(pNode T,pNode f){    pNode *temp=NULL;    if(f->lchild==T) temp=&(f->lchild);    else temp=&(f->rchild);    if(T->lchild && T->rchild){        pNode p=T->rchild;        pNode q=T;        while(p->lchild){            q=p;            p=p->lchild;        }        T->data=p->data;        del_node(p, q);    }    else if(T->lchild){        *temp=T->lchild;        delete T;    }    else if(T->rchild){        *temp=T->rchild;        delete T;    }    else{        *temp=NULL;        delete T;    }}bool delete_sbt(pNode T, int data, pNode f){    if(T==NULL){        return false;//没找到相应的元素    }    if(T->data==data){        del_node(T, f);        return true;    }    else if(T->data>data) return delete_sbt(T->lchild, data, T);    else if(T->data<data) return delete_sbt(T->rchild, data, T);    return true;}void print_tree(pNode T){    if(T->lchild) print_tree(T->lchild);    cout<<T->data<<" ";    if(T->rchild) print_tree(T->rchild);}pNode create_search_binary_tree(vector<int> vi){    pNode T=NULL;    for(auto ieh: vi){        insert_sbt(T, ieh);    }    return T;}int main(){    int c=20;    vector<int> vi;    vi={4,1,9,3,2,7,5,6};    pNode Thead=(pNode)malloc(sizeof(Node));    Thead->lchild=create_search_binary_tree(vi);    print_tree(Thead->lchild);    cout<<endl;    vector<int> del_data={1,3,7,6};    for(auto ieh: del_data){        delete_sbt(Thead->lchild, ieh, Thead);        print_tree(Thead->lchild);        cout<<endl;    }    return 0;}

原创粉丝点击