2015-03-03 199 views
0

我故意創造這個代碼錯誤的和不平衡的二叉樹:打印不平衡的二叉樹

void createlist (tree*& node) { 
node = new tree; 
    node->num = 1; 
    node->left = new tree; 
    node->left ->num = 2; 
    node->right = new tree; 
    node->right->num = 3; 
    node->left->left = new tree; 
    node->left->left->num = 4; 
    node->left->right = new tree; 
    node->left->right->num = 5; 
    node->right->left = new tree; 
    node->right->left->num = 6; 
    node->left->left->left = new tree; 
    node->left->left->left->num = 7; 
} 

然後,當我試圖使用一個普通的功能,打印:

void print (tree* node) { 
     if (node!= 0) { 
      print (node->left); 
      cout << node->num << " "; 
      print (node->right); 
     } 
    } 

它拋出一個錯誤:

Access violation reading location 0xcdcdcdd5. 

在此位置:

print (node->left); 

我剛剛開始使用樹木,不太理解這個錯誤的原因。你能幫忙嗎?

+0

你指的是哪一個樹類? – matthias 2015-03-03 12:07:40

回答

1

這是一個很好的機會讓你學習如何調試你的程序。我建議你在調試器中運行程序,看看節點和節點 - >左邊的值是什麼時候發生段錯誤。

access violation是當您訪問您的程序不允許訪問的內存時。

你的問題不是樹你的問題正確使用pointers並且沒有正確地初始化你的變量。

我懷疑你的問題是,constructor的樹沒有做正確:

left = NULL; 
right = NULL; 

記得在C/C++是在創建時,編譯器不設置任何特定值到變量,它是由給你初始化變量。

定製使用NULL(或在C++ 11中的nullptr)而不是0來測試/設置指針。

Link to C++ pointers tutorial

1

很難說,沒有您的tree類的來源,但也許使new tree不會將leftright成員初始化爲空指針?在這種情況下,一些樹會包含未初始化的指針數據。