共48道题,当前是第36

初赛真题

注释:本程序使用一种树形数据结构,实现了将读入的数据按照 “左子树 < 根 <= 右子树” 的方法建树,并输出树的深度及后序遍历。

01 #include<iostream>
02 using namespace std;
03 struct node {
04     int data, left, right;
05 };
06 node tree[300010];
07 int n, n1;
08 int ans;
09 int NNN(int x) {
10     n++;
11     tree[n].data = x;
12     tree[n].left = tree[n].right = 0;
13     return n;
14 }
15 void insert(int x, int & idx) {
16     if (!idx) {
17         idx = NNN(x);
18         return;
19     }
20     if (x < tree[idx].data)
21         insert(x, tree[idx].left);
22     else
23         insert(x, tree[idx].right);
24 }
25 
26 void dfs(int idx, int deep) {
27     if (!idx) {
28         ans = max(ans, deep);
29         return;
30     }
31     dfs(tree[idx].left, deep + 1);
32     dfs(tree[idx].right, deep + 1);
33 }
34 void printhx(int idx) {
35     if (idx) {
36         printhx(tree[idx].left);
37         printhx(tree[idx].right);
38         cout << tree[idx].data << endl;
39     }
40 }
41 int main() {
42     cin >> n1;
43     for (int i = 1; i <= n1; i++) {
44         int x;
45         cin >> x;
46         int id = 1;
47         if (i == 1)
48             NNN(x);
49         else
50             insert(x, id);
51     }   
52     dfs(1, 0);
53     cout << "deep=" << ans << endl;
54     printhx(1);
55     return 0;
56 }

1. B。
2. A。
3. B。
4. A。
5. D。
6. D。

本程序使用一种树形数据结构,实现了将读入的数据按照 “左子树 < 根 <= 右子树” 的方法建二叉搜索树,并输出树的深度及后序遍历序列。

Question

1. 在本程序中,第 6 行 node tree[300010]; 的数组必须开到数据范围的结点数的 4 倍以上( )

2. 存放树的节点时运用了指针思想( )

3. 程序第 9 至 14 行的 NNN 函数作用是给树增加一个空节点( )

4. 将程序第 31 行 dfs(tree[idx].left, deep + 1); 和 32 行 dfs(tree[idx].right,deep + 1); 交换,不会对程序产生影响( )

5. 一种树形结构是指( )

6. 以下是一个对于本程序的输入,则与之对应的输出是( )。
8
1 4 3 9 10 35 2 7
(以下选项中空格表示换行)