2013-05-30 150 views
0

我是C++的初學者,需要幫助解決這個問題。 這是一個基於樹結構的簡單創建,讀取和打印程序。打印樹顯示奇怪的字符

問題是,當我打印樹時,它顯示出由數字和字母組成的怪異信息。它可能不會讀取正確的內存數據。 我寫了一個遞歸的「創建」函數,讀取控制檯輸入並將它們添加到樹結構中。 功能如下:

  1. 讀取控制檯輸入;
  2. 如果輸入爲空,則返回NULL;
  3. 否則將輸入分配給節點值(在本例中爲「info」);
  4. 函數「自行調用」並從左到右(沿着左分支,然後到根,然後沿着右分支)。

基本上,功能檢查左邊的追隨者,因爲它下降,正確的追隨者,因爲它上升。

示例:像1-> root,2->左追隨者,3->右追隨者這樣的樹被這樣讀取:1,2,0,0,3,0,0。前兩個0分配NULL值節點「2」的追隨者,從而使該功能回到根目錄並向右分支。

一個更復雜的樹,如:1->根,2->左邊的「1」,4->左邊的「2」,5>右邊的「4」,3->右邊的「1」 ; 7->左邊的「3」,是這樣讀的:1,2,4,0,5,0,0,0,3,7,0,0,0。

「讀取」函數讀取left-> root-> right,其功能與「create」函數相同。

這是我的代碼:

#include<iostream> 
using namespace std; 
struct nod 
{ 
    int info; 
    nod *left,*right; 
} *tree; 
nod * create() 
{ 
    int n; 
    nod*r; 
    cin>>n; 
    if(n==0) 
     return NULL; 
    r=new nod; 
    r->info=n; 
    r->left=create(); 
    r->right=create(); 
    return r; 
} 

void read(nod *r) 
{ 
    if(r) 
    { 
     read(r->left); 
     cout<<r<<" "; 
     read(r->right); 
    } 
} 

int main() 
{ 
    tree =new nod; 
    tree=create(); 
    read(tree); 
    return 0; 
} 

輸入像這樣做:1,2,3,0,4,0,0,5,0,0,6,7,0,0, 0。

謝謝。

+4

你的代碼中有內存泄漏。你首先爲'tree'分配內存,但是你將_overwrite_指針,所以你鬆開了原來分配的內存。 –

+1

@DarkFalcon這就是問題所在,那麼爲什麼不把它作爲一個可以提高和接受的答案呢? –

+0

「函數」自稱「自左而右」 - 這稱爲遞歸。遞歸函數是一個自我調用的函數。 – badgerr

回答

2

我看到的輸出的唯一問題是您正在打印r,這是一個指針。我認爲你的意思是r->info

+0

是的,就是這樣,謝謝你的回答,也感謝那些考慮過這個問題的其他人。如果我的描述有任何不明確的地方,請諒解。希望這可以幫助任何有類似問題的人:),或者只是試圖創建和打印一棵樹。 – dannychris37