2013-07-14 70 views
0

我正在嘗試執行OBST的預購遍歷並以文件格式打印出來。我正確地計算了OBST的成本和根矩陣。我也可以用正確的格式輸出樹節點,但我無法弄清楚如何顯示沒有孩子的父節點。從根矩陣預先遍歷OBST

根矩陣的什麼部分表示一個節點沒有孩子或只有一個孩子?我明白如何遍歷它,並正確地輸出節點,而不是沒有孩子的節點。例如:元素是{A,B,C,D},概率{10,20,40,30}。

我計算成本矩陣和根矩陣,然後使用根矩陣輸出一棵樹。它應該是這樣的:

C 
B 
    A 
    _ 
    _ 
    _ 
D 
    _ 
    _ 

礦看起來像這樣:

C 
    B 
    A 
    _ 
    _ 
    _ 
    D 
    _ 

這是我的預購功能:

void PrintTree(int i, int j, int space) 
{ 
if(i < j) 
{ 
    outfile.write("", space++); 
    outfile<<A[Rt[i][j]]<<endl; 

    PrintTree(i, Rt[i][j], space); 
    outfile.write("",space); //This line 
    outfile<<"-"<<endl;  //This line 
    PrintTree(Rt[i][j] + 1, j, space); 
} 
} 

我幾乎可以100%肯定行其間遞歸調用要麼是錯誤的,要麼不應該在那裏。基本上,我如何正確格式化這些破折號是不存在的孩子。

+0

什麼是OBST – aaronman

+0

最優二叉搜索樹對不起... – user2079828

+0

我不好,抱歉,我來了不要認爲obst是一個廣泛使用的縮寫 – aaronman

回答

0

我只是回答了我自己的問題。

應該是:

void PrintTree(int i, int j, int space) 
{ 
if(i < j) 
{ 
    outfile.write("", space++); 
    outfile<<A[Rt[i][j]]<<endl; 
    PrintTree(i, Rt[i][j], space); 
    PrintTree(Rt[i][j] + 1, j, space); 
} 
else 
{ 
    outfile.write("",space); //This line 
    outfile<<"-"<<endl;  
} 
} 

這適用於小樹苗......但現在我越來越怪異字符。

我......我不知道在那裏,這是從,因爲它沒有輸入發生不到10