Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- /*
- Рекурсивный алгоритм
- По данному дереву постросить новое, значение в каждом узле которого равно количеству потомков
- */
- using namespace std;
- struct TTree
- {
- int value;
- TTree* left;
- TTree* right;
- };
- bool isEmpty(TTree* t)
- {
- return (t==NULL);
- }
- void addToTree(TTree** t, int newValue)
- {
- if(isEmpty((*t)))//если переданное поддерево пусто, то
- {
- TTree* temp = new TTree;//создаем новый элемент
- temp->value = newValue;//кладем переданное значение в него
- temp->left = NULL;
- temp->right = NULL;
- (*t) = temp;//и переприсваиваем новый узел переданноу поддереву
- }
- else//если непусто
- if(newValue<(*t)->value) //
- addToTree(&(*t)->left,newValue); //
- else //ищем куда его положить перемещаясь направо или налево
- if(newValue>(*t)->value) //в зависимости от добавляемого значения
- addToTree(&(*t)->right,newValue); //
- }
- int Task(TTree* t)//функция для суммирования в узел значений потомков
- {
- if(t!=NULL)//если поддеревео не пусто
- if((t->left!=NULL)||(t->right!=NULL))//если у поддерева есть потомки
- {
- int counter = 1 + Task(t->left)+Task(t->right);//считаем кол-во потомков
- t->value = counter - 1;//и кладем его в значение узла дерева. -1 потому что сам узел
- //учитывать не надо
- return counter;//и возвращаем кол-во
- }
- else
- {
- t->value = 0;//потомков нет, присваваем сюда 0
- return 1;//но этот узел является чьим то потомком, пожтому его надо учесть и вернуть здесь 1
- }
- else
- return 0;//если дерево пусто, просто возвращаем 0
- }
- void printTree(TTree *bt, int spaces)
- {
- if(bt != NULL)
- {
- printTree(bt->right, spaces + 5);
- for(int i = 0; i < spaces; i++)
- cout << ' ';
- cout << " " << bt->value << endl;
- printTree(bt->left, spaces + 5);
- }
- }
- int main()
- {
- setlocale(0,"Russian");
- TTree* treeOne = NULL;
- int t;
- for(int j=1;j<=7;j+=2)
- addToTree(&treeOne, j);
- for(int i=2;i<=8;i+=2)
- addToTree(&treeOne, i);
- printTree(treeOne,1);
- cout<<endl;
- Task(treeOne);
- printTree(treeOne,1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement