CSU1005 Binary Search Tree analog

其实这道题就是BST树,关于BST树,其实网上有很多讲解了。
这道题注意一下格式要求,需要“\n”;

#include <iostream>
using namespace std;
int a[1001];
// BST的结点
typedef struct node
{
    int key;
    struct node *lChild, *rChild;
} Node, *BST;

// 在给定的BST中插入结点,其数据域为element, 使之称为新的BST
bool 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)  // 递归
        return BSTInsert(p->lChild, element);

    return BSTInsert(p->rChild, element); // 递归
}

// 建立BST
void createBST(Node * &T, int a[], int n)
{
    T = NULL;
    int i;
    for(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);
    }
}
void f(BST T)
{
    if(T)
    {
        inOrderTraverse(T->lChild);

        inOrderTraverse(T->rChild);cout << T->key << " ";
    }
}
int main()
{
    int Ts;
    cin>>Ts;
    while(Ts--)
    {
        int n;
        BST T;
        cin>>n;
        for(int i=0;i<n;i++)
            cin>>a[i];

        // 并非所有的a[]都能构造出BST,所以,最好对createBST的返回值进行判断
        createBST(T, a, n);

        preOrderTraverse(T);
        cout << endl;

        inOrderTraverse(T);
        cout << endl;
        f(T);
        cout<<endl;

    }

    return 0;
}

结果是WA

AC代码

#include <iostream>
using namespace std;
int a[1001];
// BST的结点
typedef struct node
{
    int key;
    struct node *lChild, *rChild;
} Node, *BST;

// 在给定的BST中插入结点,其数据域为element, 使之称为新的BST
bool 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)  // 递归
        return BSTInsert(p->lChild, element);

    return BSTInsert(p->rChild, element); // 递归
}

// 建立BST
void createBST(Node * &T, int a[], int n)
{
    T = NULL;
    int i;
    for(i = 0; i < n; i++)
    {
        BSTInsert(T, a[i]);
    }
}

// 先序遍历
int pre[1001];
int mid[1001];
int fs[1001];
int coun=0;
void preOrderTraverse(BST T)
{
    if(T)
    {
        pre[coun++]=T->key;
        preOrderTraverse(T->lChild);
        preOrderTraverse(T->rChild);
    }
}

// 中序遍历
void inOrderTraverse(BST T)
{
    if(T)
    {
        inOrderTraverse(T->lChild);
        mid[coun++] =T->key;
        inOrderTraverse(T->rChild);
    }
}
void f(BST T)
{
    if(T)
    {
        f(T->lChild);

        f(T->rChild);

        fs[coun++]=T->key;
    }
}
int main()
{
    int Ts;
    cin>>Ts;
    while(Ts--)
    {
        int n;
        BST T;
        cin>>n;
        for(int i=0; i<n; i++)
            cin>>a[i];

        // 并非所有的a[]都能构造出BST,所以,最好对createBST的返回值进行判断
        createBST(T, a, n);
        coun=0;
        preOrderTraverse(T);
        for(int i=0; i<coun-1; i++)
            cout<<pre[i]<<" ";
        cout<<pre[coun-1];
        cout << endl;
        coun=0;
        inOrderTraverse(T);
        for(int i=0; i<coun-1; i++)
            cout<<mid[i]<<" ";
        cout<<mid[coun-1];
        cout << endl;
        coun=0;
        f(T);
        for(int i=0; i<coun-1; i++)
            cout<<fs[i]<<" ";
        cout<<fs[coun-1];
        cout << endl<<endl;;

    }

    return 0;
}

你可能感兴趣的:(BST)