zoukankan      html  css  js  c++  java
  • 九度题目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;
    }
    



    每天早上叫醒你的不是闹钟,而是心中的梦~
  • 相关阅读:
    SAS学习笔记27 卡方检验
    SAS学习笔记26 方差分析
    SAS学习笔记25 t检验(单个样本t检验、配对样本t检验、两个独立样本t检验及方差不齐时的t'检验)
    SAS学习笔记23 线性回归、多元回归
    HTML canvas画布
    HTML 新全局特性
    MYSQL数据库学习(五)如何自定义函数
    什么是单机结构?什么是集群?什么是分布式?
    MYSQL数据库学习(四)如何备份还原数据库
    MYSQL数据库学习(三)关于DML操作
  • 原文地址:https://www.cnblogs.com/vintion/p/4116913.html
Copyright © 2011-2022 走看看