蒜头君刚学会一项新技能——数据结构之二叉查找树。蒜头君想复习下刚学的知识,于是他找来一个序列,从序列第一个数开始,依次插入到二叉查找树里。蒜头君一边回忆刚学的知识,按照左孩子权值小,右孩子权值大的口诀,不一会儿就建立起了一棵二叉查找树。
现在蒜头君想来考考聪明的你:每个结点的左右孩子权值分别是什么?
输入格式
第一行输入一个正整数 N(1≤N≤1000)N (1 \leq N \leq 1000)N(1≤N≤1000),代表序列里元素个数。
第二行输入 NNN 个正整数,代表序列a
的 NNN 个元素 (0≤ai≤10000)(0 \leq a_i \leq 10000)(0≤ai≤10000),保证序列里的元素值互不相同。
输出格式
请按格式a(b, c)
,输出引号之间的内容,a
代表每个结点的权值,b
代表其左孩子结点权值,c
代表右孩子结点权值,如果孩子结点为空,则输出#
代替。一个结点输出一行,按结点的权值从小到大输出。注意输出,
后面的空格。
样例输入
5 2 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; }