我必须执行一个函数,给定一个int n和一个二进制搜索树,我必须转换第一个int的n级链接列表。 例如,如果给定数字2和这棵树
2
/ \
5 3
我必须用5-3列出一个喜欢的列表
我很难达到给定的级别,然后使每个节点都处于该级别,因为如果我确实达到了该级别,我将不知道如何到达下一个节点。意思是,我只能在一个分支上达到水平,并且我想不出任何递归的方法。
这是bst和链接链的结构:
struct nodo {
info_t dato;
nodo *anterior;
nodo *siguiente;
};
struct rep_cadena {
nodo *inicio;
nodo *final;
};
struct rep_binario {
info_t dato;
rep_binario *izq;
rep_binario *der;
};
这是我无法弄清楚的功能:
cadena_t nivel_en_binario(nat l, binario_t b)
我尝试使用已经完成的另一个功能,该功能可以计算树的高度,但是我不能停在想要的高度上。
nat altura_binario(binario_t b) {
if (b==NULL) return 0;
else return maximo(altura_binario(b->izq), altura_binario(b->der))+ 1;
}
其中maximo()返回两个给定数字之间的最高数字。
答案 0 :(得分:0)
您可以通过实现Breadth-first_search算法并进行一些修改来做到这一点。您可以将成对的(node, level)
(其中节点级别=父级别+ 1)加入队列,而不是仅对节点进行排队,然后在排队时可以检查是否已达到所需的级别,而只是将其作为结果输出进一步排队。
伪代码草图:
target_level = ...read from input...
let level_nodes = ...an empty list...
let queue = ...an empty queue...
queue.enqueue((root_node, 0))
while queue is not empty:
node, level = queue.dequeue()
if level == target_level:
level_nodes.append(node)
else:
if node has left child:
queue.enqueue((left_child_node, level + 1))
if node has right child:
queue.enqueue((right_child_node, level + 1))
答案 1 :(得分:0)
Adivino,Tarea 3 Programacion 2 Fingjajaja,estamos en la misma,pudiste solucionarlo?