一道二叉查找树的应用题

题目:

建立一颗二叉查找树,输出每个节点的数值以及该节点的左右子树的数值。

格式如下:

输入格式:

第一行输入一个正整数 N (1 <= N <= 1000),代表序列里元素个数。

第二行输入 N 个正整数,代表序列 a 的 N 个元素(0 <= ai <= 10000)。保证序列里的元素值互不相同。

输出格式:

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

答案:

二叉查找树的中序遍历是从小到大排列的,所以只用改变中序遍历代码即可

 

 1 #include<iostream>
 2 using namespace std;
 3 class Node {
 4 public:
 5     int data;
 6     Node *lchild, *rchild, *father;
 7     Node(int _data, Node *_father = NULL) {
 8         data = _data;
 9         lchild = NULL;
10         rchild = NULL;
11         father = _father;
12     }
13     ~Node() {
14         if (lchild != NULL) {
15             delete lchild;
16         }
17         if (rchild != NULL) {
18             delete rchild;
19         }
20     }
21     void insert(int value) {               //二叉查找树的插入(递归)
22         if (value == data) {
23             return;
24         } else if (value > data) {
25             if (rchild == NULL) {
26                 rchild = new Node(value, this);
27             } else {
28                 rchild->insert(value);
29             }
30         } else {
31             if (lchild == NULL) {
32                 lchild = new Node(value, this);
33             } else {
34                 lchild->insert(value);
35             }
36         }
37     }
38     void inorder() {
39          if (lchild != NULL) {
40              lchild->inorder();
41          }
42          cout << data<<"(";
43         if(this->lchild==NULL){
44             cout<<"#";
45         }
46         else{
47             cout<<this->lchild->data;
48         }
49          cout<<","<<" ";
50         if(this->rchild==NULL){
51             cout<<"#";
52         }
53         else{
54             cout<<this->rchild->data;
55         }
56         cout<<")"<<endl;
57          if (rchild != NULL) {
58              rchild->inorder();
59          }
60      }
61 };
62 class BinaryTree {
63 private:
64     Node *root;
65 public:
66     BinaryTree() {
67         root = NULL;
68     }
69     ~BinaryTree() {
70         if (root != NULL) {
71             delete root;
72         }
73     }
74     void insert(int value) {
75         if (root == NULL) {
76             root = new Node(value);
77         } else {
78             root->insert(value);
79         }
80     }
81     void inorder() {                           //中序
82          root->inorder();
83     }
84 };
85 int main() {
86     BinaryTree binarytree;
87     int n;
88     cin>>n;
89     int arr[n];
90     for (int i = 0; i < n; i++) {
91         cin>>arr[i];
92         binarytree.insert(arr[i]);
93     }
94     binarytree.inorder();
95     return 0;
96 }

 

posted @ 2016-07-21 14:55  绵绵思远道  阅读(414)  评论(0编辑  收藏  举报