簡單二叉排序樹

寫的屬實不好,還有輸出真的不好看

#include<iostream>
#include <malloc.h>
#include<stdio.h>
using namespace std;
typedef struct Node{
    int data;
    struct Node *lchild,*rchild;
}BiTreeNode,*BiTree;
BiTree BSTSearch (BiTree T,int x);
int BSTInsert(BiTree *T,int x);
void InOrderTraverse(BiTree T);
int main(){
    BiTree T=NULL,p;
    int table []={55,33,44,66,88,99,11,22,77};
    int n=sizeof(table)/sizeof(table [0]);
    int x,i;
    for(i=0;i<n;i++)
    BSTInsert(&T,table[i]);
    cout<<"中序遍歷二叉排序樹得到的序列爲:"<<endl;
    InOrderTraverse(T);
    cout<<"請輸入要查找的元素:";
    cin>>x;
    p=BSTSearch(T,x);
    if(p!=NULL)
    cout<<"二叉排序樹查找:元素"<<x<<"查找成功"<<endl;
    else 
    cout<<"二叉排序樹查找:沒有找到元素"<<x<<endl;
} 
BiTree BSTSearch (BiTree T,int x)
{
    BiTreeNode *p;
    if(T!=NULL)
    {
    p=T;//之前一直這裏報錯不知道爲啥,後來發現我在BiTree BSTSearch(BiTree T,int x)裏給T加了個*,才一直報錯 
        while (p!=NULL)
        {
            if(p->data==x)
            return p;
            else if(x<p->data)
            p=p->lchild;
            else p=p->rchild; 
        }
    }
    return 0;
}
int BSTInsert(BiTree *T,int x)
{
    BiTreeNode *p,*cur,*parent=NULL;
    cur=*T;
    while(cur!=NULL)
    {
        if(cur->data==x)
        return 0;
        parent=cur;
        if(x<cur->data)
        cur=cur->lchild;
        else 
        cur=cur->rchild;
    }
    p=(BiTreeNode*)malloc(sizeof(BiTreeNode));
    if(!p)
    exit(-1);
    p->data=x;
    p->lchild=NULL;
    p->rchild=NULL;
    if(!parent)
    *T=p;
    else if(x<parent->data)
    parent->lchild=p;
    else parent->rchild=p;
    return 1;   
}
void InOrderTraverse(BiTree T)
{
    if(T)
    {
        InOrderTraverse(T->lchild);
        cout<<T->data;
        InOrderTraverse(T->rchild) ;
    }
 } 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章