九度题目1201:二叉排序树

题目描述:

    输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。

输入:

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

输出:

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

样例输入:
5
1 6 5 9 8
样例输出:
1 6 5 9 8 
1 5 6 8 9 
5 8 9 6 1 
提示:

输入中可能有重复元素,但是输出的二叉树遍历序列中重复元素不用输出。


说明: 每行输出后有一个空格,这样处理起来就可用递归很方便的说


#include<stdio.h>

struct Node
{
    int val;
    Node* left;
    Node* right;
    Node(int a):val(a),left(NULL),right(NULL){};
};

void pre(Node *root)
{
    if(NULL==root)
        return;
    printf("%d ",root->val);
    pre(root->left);
    pre(root->right);
}
void aft(Node *root)
{
    if(NULL==root)
        return;
    aft(root->left);
    aft(root->right);
    printf("%d ",root->val);
}
void mid(Node *root)
{
    if(NULL==root)
        return;
    mid(root->left);
    printf("%d ",root->val);
    mid(root->right);
}
void dele(Node *root)
{
    if(NULL==root)
        return;
    dele(root->left);
    dele(root->right);
    delete(root);
}
int main()
{
    int n;
    int val;
    Node *root;
    Node *p;
    while(~scanf("%d",&n))
    {
        for(int i=0;i<n;i++)
        {
            scanf("%d",&val);
            if(i==0)  
            {
                root = new Node(val);
                continue;
            }
            p = root;
            while(1)
            {
                if(val==p->val)
                    break;
                if(val>p->val)
                {
                    if(p->right==NULL)
                    {
                        p->right = new Node(val);
                        break;
                    }
                    else
                    {
                        p = p->right;
                        continue;
                    }
                }
                else
                {
                    if(p->left==NULL)
                    {
                        p->left = new Node(val);
                        break;
                    }
                    else
                    {
                        p = p->left;
                        continue;
                    }
                }
                    
            }
        }
        pre(root);
        printf("
");
        mid(root);
        printf("
");
        aft(root);
        printf("
");
        dele(root); 
    }
    return 0;
}



每天早上叫醒你的不是闹钟,而是心中的梦~
原文地址:https://www.cnblogs.com/vintion/p/4116913.html