首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将给定级别的二叉树转换为链式链?

如何将给定级别的二叉树转换为链式链?
EN

Stack Overflow用户
提问于 2019-04-13 22:28:30
回答 2查看 123关注 0票数 1

我必须做一个函数,在给定一个int n和一个二进制搜索树的情况下,我必须将bst的级别n转换为一个链表。例如,如果给定数字2和这棵树

代码语言:javascript
复制
      2
     /  \
    5    3

我要做一个5-3的点赞名单

我无法到达给定的级别,然后在该级别上获取每个节点,因为如果我真的达到了该级别,我就不知道如何到达下一个节点。这意味着,我只能在一个分支上达到这个级别,而且我想不出任何递归的方法。

下面是bst和链接链的结构:

代码语言:javascript
复制
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;
}; 

这就是我搞不懂的函数:

代码语言:javascript
复制
cadena_t nivel_en_binario(nat l, binario_t b)

我试过使用我已经制作的另一个函数,它可以计算树的高度,但我不能停在想要的级别上。

代码语言:javascript
复制
nat altura_binario(binario_t b) {
    if (b==NULL) return 0;
    else return maximo(altura_binario(b->izq), altura_binario(b->der))+ 1;
    }

其中,maximo()返回两个给定数字之间的最大数字。

EN

回答 2

Stack Overflow用户

发布于 2019-04-13 22:52:39

你可以通过实现Breadth-first_search算法,并稍微修改一下来实现。您可以将成对的(node, level) (其中node level = parent level + 1)排入队列,而不是只将节点排入队列,然后在排队时,您可以检查是否达到了所需的级别,并将其作为结果输出,而不是进一步排队。

伪代码草图:

代码语言:javascript
复制
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))
票数 0
EN

Stack Overflow用户

发布于 2019-04-25 09:29:33

Adivino,Tarea 3 Programacion 2 Fing jajaja,estamos en la misma,pudiste solucionarlo?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55666565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档