[英]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.