注释:本程序使用一种树形数据结构,实现了将读入的数据按照 “左子树 < 根 <= 右子树” 的方法建树,并输出树的深度及后序遍历。
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. 在本程序中,第 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(以下选项中空格表示换行)