簡體   English   中英

如何將給定級別的二進制搜索樹轉換為鏈接鏈?

[英]how to convert a given level of a binary search tree into a linked chain?

我必須做一個函數,給定一個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()返回兩個給定數字之間的最高數字。

您可以通過實現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))

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM