我有一個函數get_trees(),它對複雜的樹結構T進行操作並返回兩個組件樹結構A和B.我一直能夠得到這個結果是創建具有指針A和B的新結構C,然後將其作爲一個參數傳遞給函數,也是一個返回值:樹木甲&乙在遞歸函數中返回並使用多個樹結構
typedef struct Composite {
itree *A;
itree *B;
} composite;
composite *get_trees(complextree *T, itree *A, itree *B, composite *C);
根節點在另一個函數被初始化:
itree *A = new_itree(0);
itree *B = new_itree(0);
A->n = T->a;
B->n = T->b;
composite *C;
C = get_trees(T, A, B, C);
ge t_trees()遍歷Complextree T的分支,分配並填充A和B的節點,並遞歸地在子節點上調用它自己。簡化代碼:
//code for allocating subnodes of A and B
if (T->nodes != NULL){
for (i=0; i< T->nn; i++){
//code for computing p & q
C = get_trees(T->nodes[i], A->nodes[p], B->nodes[q]);
}
}
代碼工作正常。但它看起來非常醜陋。
(1)C沒有內在含義,即用於允許多個值的返回。有其他選擇嗎?大致如下的內容:
(2)是否有可能寫具有以下簽名遞歸函數:
void get_trees(T, A, B);
是看來,如果我通過& B的根節點作爲參數和子節點被分配在遞歸函數中,那麼可以說有一個連續的命令鏈,並且當遞歸調用完成時整個樹應該可用。它不適合我,所以它不能被允許。我很感激,如果有人能解釋爲什麼是這樣的話,或者如果一個更優雅的解決方案是可能的?
感恩節快樂。 〜RT
感謝您的即時響應。這顯然看起來更清潔。我仍然不確定,在每個遞歸步驟中,我如何將* AOut與* A綁定在一起?請給我一個具體的描述嗎?這將澄清我的一些錯誤假設。 謝謝,RT – user151410 2009-12-27 01:47:43
我希望我能幫忙,但目前還不清楚你如何使用複合材料,所以我不知道如何替代。 'C = get_trees(T-> nodes [i],A-> nodes [p],B-> nodes [q]);'缺少一個arg,你如何將返回值反饋回遞歸函數? – 2009-12-27 02:00:01
爲額外的空間添加一個新的「答案」.RT – user151410 2009-12-27 14:28:17