Sorry for creating a new theme, but in the past there is nowhere to comment on and a lot of things have been written, but I have to finish it today and I need to finish a little bit. The problem is that it does not work for me to transfer nodes with depth x to my function. Task: For the given values ​​of "x" calculate the number of all nodes with a depth of "x" in a given tree. that is, the question of transferring this value to these functions. The values ​​there are clear how the functions are set, but I did not understand the depths. Explain please, I already understood the rest how to do it, but I don’t understand it at all.

Functions to which I pass:

void sumx (Node *Tree, int x[], int nx ) { for (int i = 0; i < nx; i++) cout << "level: " << x[i] << ' ' << cntx(Tree, x[i]) << "Nodes\n"; } int cntx (Node *Tree, int deep) { if (!Tree || deep < 0) return 0; if (deep == 0) return 1; return cntx(Tree->l, --deep) + cntx(Tree->r, --deep); } весь код: #include <iostream> #include <conio.h> using namespace std; struct Node { int x; Node *l,*r; }; void show(Node *&Tree) { if (Tree!=NULL) { show(Tree->l); cout<<Tree->x; show(Tree->r); } cout << Tree->x << " [" << Tree << " left: " << Tree->l << " right: " << Tree->r << "]\n"; } void add_node(int x,Node *&MyTree) { if (MyTree) { if (x < MyTree->x) add_node(x, MyTree->l); else add_node(x, MyTree->r); } else { MyTree=new Node; MyTree->x=x; MyTree->l=MyTree->r=NULL; } } void sumx (Node *Tree, int x[], int nx ) { for (int i = 0; i < nx; i++) cout << "level: " << x[i] << ' ' << cntx(Tree, x[i]) << "Nodes\n"; } int cntx (Node *Tree, int deep) { if (!Tree || deep < 0) return 0; if (deep == 0) return 1; return cntx(Tree->l, --deep) + cntx(Tree->r, --deep); } void DeleteTree(Node *Tree) { if (Tree) { DeleteTree(Tree->l); DeleteTree(Tree->r); delete Tree; Tree = NULL; } } int main() { Node *Tree=NULL; int z,k; cin >> z; for (int i=0;i<z;i++) { cin >> k; add_node(k,Tree); } show(Tree); DeleteTree(Tree); cin.get(); getch(); return 0; } 

    1 answer 1

    @Lera_E , frankly, I do not understand what is there to explain.

    This is essentially your code (slightly corrected under Linux) and the results of the launch.

     avp@avp-ubu1:~/hashcode$ cat tttx.cpp //#include "stdafx.h" #include <iostream> #include <stdlib.h> using namespace std; struct Node { int x; Node *l,*r; }; void show(Node *&Tree) { if (Tree!=NULL) { show(Tree->l); // cout<<Tree->x; cout << Tree->x << " [" << Tree << " left: " << Tree->l << " right: " << Tree->r << "]\n"; show(Tree->r); } } void add_node(int x,Node *&MyTree) { if (MyTree) { if (x < MyTree->x) add_node(x, MyTree->l); else add_node(x, MyTree->r); } else { MyTree=new Node; MyTree->x=x; MyTree->l=MyTree->r=NULL; } } int cntx (Node *Tree, int deep) { if (!Tree || deep < 0) return 0; if (deep == 0) return 1; return cntx(Tree->l, --deep) + cntx(Tree->r, --deep); } void sumx (Node *Tree, int x[], int nx ) { for (int i = 0; i < nx; i++) cout << "level: " << x[i] << ' ' << cntx(Tree, x[i]) << " Nodes\n"; } void DeleteTree(Node *Tree) { if (Tree) { DeleteTree(Tree->l); DeleteTree(Tree->r); delete Tree; } } int main(int ac, char *av[]) { Node *Tree=NULL; int z,k; cin >> z; for (int i=0;i<z;i++) { cin >> k; add_node(k,Tree); } show(Tree); for (int i = 0; i < ac; i++) cout << "level: " << atoi(av[i]) << ' ' << cntx(Tree, atoi(av[i])) << " Nodes\n"; int x[] = {1, 3, 5, 15}; cout << "Again show number of nodes for levels\n"; sumx(Tree, x, 4); cout << "All Tree levels cnt nodes\n"; int n; for (int i = 0; n = cntx(Tree, i); i++) cout << n << " nodes on level " << i << '\n'; DeleteTree(Tree); return 0; } avp@avp-ubu1:~/hashcode$ g++ tttx.cpp avp@avp-ubu1:~/hashcode$ ./a.out 1 2 3 4 5 6 7 8 9 10 10 2 30 4 50 22 34 1 23 12 8 1 [0x254a0d0 left: 0 right: 0] 2 [0x254a010 left: 0x254a0d0 right: 0x254a030] 4 [0x254a050 left: 0 right: 0x254a090] 8 [0x254a130 left: 0 right: 0] 12 [0x254a110 left: 0x254a130 right: 0] 22 [0x254a090 left: 0x254a110 right: 0x254a0f0] 23 [0x254a0f0 left: 0 right: 0] 30 [0x254a030 left: 0x254a050 right: 0x254a070] 34 [0x254a0b0 left: 0 right: 0] 50 [0x254a070 left: 0x254a0b0 right: 0] level: 0 1 Nodes level: 1 1 Nodes level: 2 1 Nodes level: 3 1 Nodes level: 4 1 Nodes level: 5 2 Nodes level: 6 1 Nodes level: 7 2 Nodes level: 8 0 Nodes level: 9 0 Nodes level: 10 0 Nodes Again show number of nodes for levels level: 1 1 Nodes level: 3 1 Nodes level: 5 2 Nodes level: 15 0 Nodes All Tree levels cnt nodes 1 nodes on level 0 1 nodes on level 1 1 nodes on level 2 1 nodes on level 3 1 nodes on level 4 2 nodes on level 5 1 nodes on level 6 2 nodes on level 7 avp@avp-ubu1:~/hashcode$ 

    I painted the output of the number of nodes in levels even in three different ways.