二叉排序树的实现和查找 swust oj#1011

…衆ロ難τιáo~ 提交于 2020-03-05 15:33:52

二叉排序树就是插入值比当前节点小的就往当前节点的左子树递归,比当前节点大的就往当前节点的右子树递归,若遇到空节点(即不能比较下去)就在这个位置建立新节点节点值为插入值。
附代码:

#include <iostream>
using namespace std;
typedef struct l{
    int val;
    struct l* lchild,* rchild;
}lb;
int n,k,flag;
void insertBST(lb*& T,int k){//注意引用T
    if(T==NULL){
        T=new lb;
        T->val=k;
        T->lchild=T->rchild=NULL; return ;
    }
    if(T->val<k){
        insertBST(T->rchild,k);
    }
    else if(T->val>k){
        insertBST(T->lchild,k);
    }
}
lb* chushi(lb*& T){
    T=new lb;
    int d; cin>>d;
    T->val=d;
    T->lchild=T->rchild=NULL;
    return T;
}
lb* create(lb*& F){
    for(int i=0;i<n-1;i++){
        int a; cin>>a;
        insertBST(F,a);
    }
    return F;
}
void chazhao(lb* T,int l){
    if(T==NULL) return ;
    k++;
    if(T->val==l) {
        cout<<k; flag=1; return ;
    }
    else if(l>T->val){
       chazhao(T->rchild,l);
    }
    else if(l<T->val){
        chazhao(T->lchild,l);
    }
}
int main(){
    cin>>n;
    lb* root;
    root=chushi(root);
    root=create(root);
    int c; cin>>c;
    chazhao(root,c);
    if(!flag){
        cout<<"-1";
    }
}

题目出处

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!