1919 Problem A 二叉排序树

本文介绍了一种使用C++实现二叉排序树的方法,并演示了如何通过输入一系列整数来构建二叉排序树,接着对该树进行了前序、中序和后序遍历。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题 A: 二叉排序树
时间限制: 1 Sec 内存限制: 32 MB
献花: 46 解决: 30
[献花][花圈][TK题库]
题目描述
输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。

输入
输入第一行包括一个整数n(1<=n<=100)。接下来的一行包括n个整数。

输出
可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。每种遍历结果输出一行。每行最后一个数据之后有一个空格。

样例输入
1
2
2
8 15
4
21 10 5 39
样例输出
2
2
2
8 15
8 15
15 8
21 10 5 39
5 10 21 39
5 10 39 21

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>

using namespace std;
const int MaxN = 110;

typedef struct tnode
{
    int v;
    struct tnode * lchild;
    struct tnode * rchild;
}TNode;

void Insert(TNode *&Root,int val)
{
    if(!Root)
    {
        Root = new TNode;
        Root->v = val;
        Root->lchild = Root->rchild = NULL;
        return;
    }

    if(Root->v == val) return;
    else if(Root->v > val)
        return Insert(Root->lchild,val);
    else
        return Insert(Root->rchild,val);
}


TNode * CreateTree(int Data[],int n)
{
    TNode * root = NULL;
    for(int i=0;i<n;++i)
        Insert(root,Data[i]);

    return root;
}

void DestroyTree(TNode * &Root)
{
    if(!Root)return;
    DestroyTree(Root->lchild);
    DestroyTree(Root->rchild);
    delete Root;
    Root = NULL;
}


void PreOrder(TNode * root,int &curn,int n)
{
    if(!root) return;

    cout << root->v;++curn;
    if(curn != n) cout << " ";

    PreOrder(root->lchild,curn,n);
    PreOrder(root->rchild,curn,n);
}

void InOrder(TNode * root,int &curn,int n)
{
    if(!root) return;

    InOrder(root->lchild,curn,n);

    cout << root->v;++curn;
    if(curn != n) cout << " ";

    InOrder(root->rchild,curn,n);
}

void PostOrder(TNode * root,int &curn,int n)
{
    if(!root) return;

    PostOrder(root->lchild,curn,n);
    PostOrder(root->rchild,curn,n);

    cout << root->v;++curn;
    if(curn != n) cout << " ";
}

int main()
{
#ifdef _Debug
freopen("data.txt","r+",stdin);
#endif

    std::ios::sync_with_stdio(false);

    int n,seq[MaxN],tmp;

    while(cin >> n)
    {
        for(int i=0;i<n;++i)
            cin >> seq[i];
        TNode *root = CreateTree(seq,n);
        tmp = 0;PreOrder(root,tmp,n);cout << endl;
        tmp = 0;InOrder(root,tmp,n);cout<<endl;
        tmp = 0;PostOrder(root,tmp,n);cout <<endl;
        DestroyTree(root);
    }



    return 0;
}

/**************************************************************
    Problem: 1919
    User: Sharwen
    Language: C++
    Result: 升仙
    Time:1 ms
    Memory:1696 kb
****************************************************************/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值