Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Деревья. Удалить самые низкие листья (С++) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Считывает текст из файла! http://www.cyberforum.ru/cpp-beginners/thread841979.html
Написал программу которая считывает текст из файла и выводит его на экран меняя местами два соседних слова. Но почему то при запуске программу открывается черный экран мегает курсор и ничего не...
C++ не могу понять помогите пожалуйста разобраться в программе?#include <iostream> #include <fstream> using namespace std; struct node { char x; node *left,*rigth; }; http://www.cyberforum.ru/cpp-beginners/thread841978.html
C++ Структуры. Сортировать студентов по году рождения
Помогите, в общем такой вопрос.Я попытался создать структуру. Теперь хочу отсортировать чтудентов по году рождения. Допишите код плс. #include <stdio.h> #include <conio.h> #include...
Описати структуру з ім'ям AEROFLOT, що містить такі поля: C++
Описати структуру з ім'ям AEROFLOT, що містить такі поля: □ назва пункту призначення рейсу; □ номер рейсу; □ тіпсамолета. Написати проірамму, вьіполняющую наступні дії:
C++ Дан текст, состоящий не менее чем из пяти слов http://www.cyberforum.ru/cpp-beginners/thread841952.html
Дан текст, состоящий не менее чем из пяти слов. Сформировать стек из тех слов, в которых присутствует буква "Е". Нужно срочно решить задачу..у самого ничего не получается( помогите пожалуйста.
C++ Использование шаблонного класса Само задание- Дана матрица размера m*n. Найти ее седловую точку, то есть элемент матрицы, которой является одновременно наибольшим в строке и наименьшим в столбце. Если имеется несколько Седловых... подробнее

Показать сообщение отдельно
gazlan
3132 / 1908 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
19.04.2013, 01:42
Если вы не понимаете псевдокод, то любой другой для вас тем более бесполезен.

Двоичное дерево вы себе представляете?

Возможны три состояния для узла:

1. Нет потомков. Это терминальный узел. Его надо запомнить (как зовут и на каком уровне).
2. Один потомок. Тут без вариантов, по единственному линку переходим.
3. Два потомка. Придерживаемся правила: сначала всегда левый, потом - правый. Можно наоборот, но всегда одинаково.

Вам нужна функция Visitor(Node* pNode,Action* pAction,int Level), обходящая все узлы по одному разу. В каждом узле вызывается Action() и что-то делает, в зависимости от узла. В вашем случае интересны только терминальные узлы - их запоминаем.

Обход начинаем с корня. У него максимум два потомка. Идем сначала в левый, потом в правый.
В каждом потомке делаем то же самое - рекурсивно.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void Visitor(Node* pNode,Action* pAction,int Level)
{
   if (pNode->pLeft)
   {
      Visitor(pNode->pLeft,pAction,++Level);
   }
 
   if (pNode->pRight)
   {
      Visitor(pNode->pRight,pAction,++Level);
   }
 
   if (!pNode->pLeft && !pNode->pRight)
   {
      // Bingo !
      // Store the Node
   }
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru