我是C++的初學者,需要幫助解決這個問題。 這是一個基於樹結構的簡單創建,讀取和打印程序。打印樹顯示奇怪的字符
問題是,當我打印樹時,它顯示出由數字和字母組成的怪異信息。它可能不會讀取正確的內存數據。 我寫了一個遞歸的「創建」函數,讀取控制檯輸入並將它們添加到樹結構中。 功能如下:
- 讀取控制檯輸入;
- 如果輸入爲空,則返回NULL;
- 否則將輸入分配給節點值(在本例中爲「info」);
- 函數「自行調用」並從左到右(沿着左分支,然後到根,然後沿着右分支)。
基本上,功能檢查左邊的追隨者,因爲它下降,正確的追隨者,因爲它上升。
示例:像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。
謝謝。
你的代碼中有內存泄漏。你首先爲'tree'分配內存,但是你將_overwrite_指針,所以你鬆開了原來分配的內存。 –
@DarkFalcon這就是問題所在,那麼爲什麼不把它作爲一個可以提高和接受的答案呢? –
「函數」自稱「自左而右」 - 這稱爲遞歸。遞歸函數是一個自我調用的函數。 – badgerr