二叉搜索树之蒜头君的新技能

来源:互联网 发布:云计算架构师 技术栈 编辑:程序博客网 时间:2024/04/29 01:42

蒜头君刚学会一项新技能——数据结构之二叉查找树。蒜头君想复习下刚学的知识,于是他找来一个序列,从序列第一个数开始,依次插入到二叉查找树里。蒜头君一边回忆刚学的知识,按照左孩子权值小,右孩子权值大的口诀,不一会儿就建立起了一棵二叉查找树。

现在蒜头君想来考考聪明的你:每个结点的左右孩子权值分别是什么?

输入格式

第一行输入一个正整数 N(1≤N≤1000)N (1 \leq N \leq 1000)N(1N1000),代表序列里元素个数。

第二行输入 NNN 个正整数,代表序列aNNN 个元素 (0≤ai≤10000)(0 \leq a_i \leq 10000)(0ai10000),保证序列里的元素值互不相同。

输出格式

请按格式a(b, c),输出引号之间的内容,a代表每个结点的权值,b代表其左孩子结点权值,c代表右孩子结点权值,如果孩子结点为空,则输出#代替。一个结点输出一行,按结点的权值从小到大输出。注意输出,后面的空格。

样例输入

52 5 3 1 4

样例输出

1(#, #)2(1, 5)3(#, 4)4(#, #)5(3, #) 
#include<iostream>using std::endl;using std::cout;using std::cin;class Node{public:int data;Node* rchild,* lchild;    Node(int _data)    {    data = _data;    rchild = NULL;    lchild = NULL;}    ~Node()    {    if(rchild != NULL)    {    delete rchild;}if(lchild != NULL){delete lchild;}}void insert(int value){if(data == value){return;}else if(value > data)    {    if(rchild == NULL)    {    rchild = new Node(value);}else{rchild->insert(value);}}else{if(lchild == NULL){lchild = new Node(value);}else{lchild->insert(value);}}}Node* search(int value){if(data == value){return this;}else if(value > data){if(rchild == NULL){return NULL;}else{    return rchild->search(value);}}else{if(lchild == NULL){return NULL;}else{return lchild->search(value);}}}};class BinaryTree{private:Node* root;public:BinaryTree(){root = NULL;}~BinaryTree(){if(root != NULL){delete root;}}void insert(int value){if(root == NULL){root = new Node(value);}else{    root->insert(value);        }}void output(int value){Node* temp = root->search(value);if(temp->rchild == NULL){if(temp->lchild == NULL){cout << value << "(#, #)";}else{cout << value << "(" << temp->lchild->data << ", #)";}}else{if(temp->lchild == NULL){cout << value << "(#, " << temp->rchild->data << ")"; }else{cout << value << "(" << temp->lchild->data << ", " << temp->rchild->data << ")";}}}};int main(){int num;cin >> num;int* list = new int[num];BinaryTree a;for(int i = 0; i < num; ++i){cin >> list[i];        a.insert(list[i]);}for(int i = 0; i < num; ++i){    for(int j = num - 1; j > i; --j){    if(list[j] < list[j - 1]){    int temp = list[j];list[j] = list[j - 1];list[j - 1] = temp;}}}for(int i = 0; i < num; ++i){a.output(list[i]);cout << endl;}return 0;}


0 0