Я немного удивлен, что вы знаете об обходном порядке, но не можете решить это самостоятельно. Я дам вам базовый план:
Я предполагаю, что член info
в вашем tree_node
является идентификатором узла.
Вы должны сделать следующее:
1) инициализировать структуры данных, то есть, установить adjacency_m[i][j] = 0
для всех i,j
, 0 <= i < n
, 0 <= j < n
2) В вашем упорядоченном обходе, когда вы посещаете узел:
tree_to_graph(tree_node *node) {
// add a pointer to the node
graph->nodes[node->info] = node;
if(node->left) {
// if node has a left child, , add adjecancy matrix entries for edges from node -> left, and left -> node
graph->adjacency_m[node->info][node->left->info] = 1;
graph->adjacency_m[node->left->info][node->info] = 1;
tree_to_graph(node->left);
}
if(node->right) {
// if node has a right child, add adjecancy matrix entries for edges from node -> right, and right-> node
graph->adjacency_m[node->info][node->right->info] = 1;
graph->adjacency_m[node->right->info][node->info] = 1;
tree_to_graph(node->right);
}
}
Edit: Как вы можете видеть на обсуждение в комментариях, ваш вопрос был не совсем понятно. Вы должны дистанцироваться между абстрактными, математическими концепциями дерева и графом и структурами данных, которые используются для их представления. Как вы правильно говорите, BFS, Kruskal и Prim могут использоваться для вычисления остовного дерева графика. Как объяснено в комментариях, любое дерево является графиком по определению. Граф часто представлен матрицей смежности, поскольку двоичное дерево часто представлено с помощью рекруссивной древовидной структуры. Обратите внимание, что вы можете также представлять двоичное дерево с матрицей смежности (при необходимости вы можете кодировать «левую» и «правую» дочернюю информацию с разными значениями смежности, например, 1 и 2), и график с такой рекурсивной древовидной структуры (хотя для общего графика вам нужно будет иметь более двух исходящих ребер).В вашем вопросе вы спрашиваете о преобразовании представления двоичного дерева из древовидной рекурсивной структуры в матрицу смежности.
Ни в коем случае не начинается с полученного графика априори. – StoryTeller
Насколько мне научили - дерево - это график. –
@Adrian Jałoszewski, см. Мой обновленный вопрос. Дерево имеет левый и правый указатель, а для графа нам нужна матрица смежности или список смежности. – ufo