二叉搜索树

来源:互联网 发布:学python和java哪个好 编辑:程序博客网 时间:2024/06/04 23:18
#include<iostream>#include<cstdlib>#include<cmath>#include<cstring>using namespace std;typedef struct node{    int key;    struct node *lChild,*rChild;}Node,*BST;//给定的BST中插入结点,其数据域为element,使之成为新的STbool BSTInsert(Node * &p,int element){    if(NULL==p)//空树    {        p=new Node;        p->key=element;        p->lChild=p->rChild=NULL;        return true;    }    if(element==p->key)//BST中不能有相等的值;        return  false;    if(element<p->key)//递归;         return  BSTInsert(p->lChild,element);         return  BSTInsert(p->rChild,element);}//建立BSTvoid creatBST(node * &T,int a[],int n){    T=NULL;    int i;    for(int i=0;i<n;i++)    {        BSTInsert(T,a[i]);    }}//先序遍历void preOrderTraverse(BST T){    if(T)    {        cout<<T->key<<" ";        preOrderTraverse(T->lChild);        preOrderTraverse(T->rChild);    }}//中序遍历void inOrderTraverse(BST T){     if(T)    {        inOrderTraverse(T->lChild);        cout<<T->key<<" ";        inOrderTraverse(T->rChild);    }}int main(){    int a[10]={4,5,2,1,0,9,3,7,6,8};    int n=10;    BST T;    //并非所有的[]都能构构造出BST,所以,最好对reatBST的返回值进行判断;    creatBST(T,a,n);    preOrderTraverse(T);    cout<<endl;    inOrderTraverse(T);    cout<<endl;    return 0;}