powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вывод потдерева по заданой вершине
3 сообщений из 3, страница 1 из 1
Вывод потдерева по заданой вершине
    #34593164
Jevgeniy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер.
Имеется примерно такая иерархия:
Код: plaintext
1.
2.
3.
4.
            1 
        2           3       
   4     5     6      7       8  
 9    10 
которая хранится в таблице базы данных. Иерархия организована в таблице с такими полями: id, pid, level. Причем количество потомков у кадого из узлов можеть быть различно.
Нужно написать функцию, которая выводила бы все дочерние узлы, например для корня 2 , в грид.
Я так понимаю тут нужно использовать сложные циклы или же обойтись рекурсией. Однако уже 2-й день бьюсь над этим вопросом и не могу ничего придумать.
Вот код функции которая вводит прямых потомков заданого узла:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CTreeForm::TreeSearch(int root){
	while(!m_pSet->IsEOF()){
		if(atoi(m_pSet->m_pid)==root){
			m_Grid.SetRows(iRowCount+ 1 );
			m_Grid.SetRow(iRowCount);
			m_Grid.SetCol( 0 );
			m_Grid.SetText(m_pSet->m_ind_num);
			m_Grid.SetCol( 1 );
			m_Grid.SetText(m_pSet->m_p_ind_num);
			m_Grid.SetCol( 2 );
			m_Grid.SetText(m_pSet->m_surname);
			iRowCount++;
		}
		m_pSet->MoveNext();
	}
}
Однако как быть дальше не знаю.
Помагите пожалуйста, очень срочно и очень нада решить данный вопрос.
Спасибо.
...
Рейтинг: 0 / 0
Вывод потдерева по заданой вершине
    #34597392
Jevgeniy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Люди, ну помагите кто-нибудь!!! ПЛИИИИИЗ!
...
Рейтинг: 0 / 0
Вывод потдерева по заданой вершине
    #34600553
Jevgeniy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, проблема решена:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
CTreeForm::TreeSearch(int root){
	int buf[ 256 ];
	int count= 0 ;
	m_pSet->MoveFirst();
	while(!m_pSet->IsEOF()){
		if(atoi(m_pSet->m_pid)==root){
			m_Grid.SetRows(iRowCount+ 1 );
			m_Grid.SetRow(iRowCount);
			m_Grid.SetCol( 0 );
			m_Grid.SetText(m_pSet->m_ind_num);
			m_Grid.SetCol( 1 );
			m_Grid.SetText(m_pSet->m_p_ind_num);
			m_Grid.SetCol( 2 );
			m_Grid.SetText(m_pSet->m_surname);
			iRowCount++;
			buf[count]=atoi(m_pSet->m_id);
			count++;
		}
		m_pSet->MoveNext();
	}
	if(count> 0 ){
		m_pSet->MoveFirst();
		for(int i= 0 ; i<=count;i++){
			TreeSearch(buf[i]);

		}
	}
	count= 0 ; 
}

Если есть более красивые варианты решения буду только рад
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вывод потдерева по заданой вершине
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]