九度OJ——1201二叉排序树

来源:互联网 发布:java项目目录结构 编辑:程序博客网 时间:2024/05/17 22:30

题目描述:
输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。
输入:
输入第一行包括一个整数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
提示:
输入中可能有重复元素,但是输出的二叉树遍历序列中重复元素不用输出。


思路:很基础的题,二叉排序树的构建与二叉树的遍历。
AC代码:

#include <iostream>using namespace std;class BinarySearchTree{    private:        int data;        BinarySearchTree* lchild;        BinarySearchTree* rchild;    public:             //插入函数        BinarySearchTree* Insert(BinarySearchTree* bst,int data){            if(!bst){                bst = new BinarySearchTree;                bst->data = data;                bst->lchild = bst->rchild = NULL;            }else if(data > bst->data){                bst->rchild = this->Insert(bst->rchild,data);            }else if(data < bst->data){                bst->lchild = this->Insert(bst->lchild,data);            }            return bst;        }        //前序遍历        void PreorderTraversal(BinarySearchTree* bst){            if(!bst){                return;            }            cout<<bst->data<<" ";            bst->PreorderTraversal(bst->lchild);            bst->PreorderTraversal(bst->rchild);        }        //中序遍历        void InorderTraversal(BinarySearchTree* bst){            if(!bst){                return;            }            bst->InorderTraversal(bst->lchild);            cout<<bst->data<<" ";            bst->InorderTraversal(bst->rchild);        }        //中序遍历        void PostorderTraversal(BinarySearchTree* bst){            if(!bst){                return;            }            bst->PostorderTraversal(bst->lchild);            bst->PostorderTraversal(bst->rchild);            cout<<bst->data<<" ";        }};int data,N;BinarySearchTree* bst;int main(){    while(cin>>N){        bst = NULL;         for(int i = 0 ; i < N ; i++){            cin>>data;            bst = bst->Insert(bst,data);        }        bst->PreorderTraversal(bst);        cout<<endl;        bst->InorderTraversal(bst);        cout<<endl;        bst->PostorderTraversal(bst);        cout<<endl;    }    return 0;}
原创粉丝点击