我必须做一个函数,在给定一个int n和一个二进制搜索树的情况下,我必须将bst的级别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()返回两个给定数字之间的最大数字。
发布于 2019-04-13 22:52:39
你可以通过实现Breadth-first_search算法,并稍微修改一下来实现。您可以将成对的(node, level) (其中node level = parent 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))发布于 2019-04-25 09:29:33
Adivino,Tarea 3 Programacion 2 Fing jajaja,estamos en la misma,pudiste solucionarlo?
https://stackoverflow.com/questions/55666565
复制相似问题