二叉排序树

来源:互联网 发布:网吧服务器优化 编辑:程序博客网 时间:2024/06/07 04:06

二叉搜索树(二叉排序树):

(1)是棵空树

(2)若左子树不空,左子树上所有结点的值均小于他的根节点的值;若右子树不空,则右子树上所有的结点的值均大于它的根节点的值。

(3)左子树和右子树均为二叉排序树


#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>#include<stack>#define inf 0x3f3f3f3fusing namespace std;struct BinarySortTreeNode{    int data;    BinarySortTreeNode *lchild,*rchild;};void InsertBinarySortTree(BinarySortTreeNode* &T,int k){    if(T==NULL)    {        T=(BinarySortTreeNode*)malloc(sizeof(BinarySortTreeNode));        T->data=k;        T->lchild=NULL;        T->rchild=NULL;    }    else    {        if(k>T->data)            InsertBinarySortTree(T->rchild,k);        if(k<T->data)            InsertBinarySortTree(T->lchild,k);    }}bool FindNode(BinarySortTreeNode* T,int k){    if(T==NULL)        return false;    if(T->data==k)        return true;    else if(k>T->data)        return FindNode(T->rchild,k);    else        return FindNode(T->lchild,k);}int main(){    int n;    cin>>n;    BinarySortTreeNode *T=NULL;    for(int i=1;i<=n;i++)    {        int k;        cin>>k;        InsertBinarySortTree(T,k);    }    int num;    cin>>num;    while(num--)    {        int v;        cin>>v;        if(FindNode(T,v)==true)            cout<<"Yes"<<endl;        else            cout<<"No"<<endl;    }    return 0;}