2016-07-22 144 views
0

安慰我只是想指出,我已經看到了這個帖子問我的問題之前:C How to "draw" a Binary Tree to the console繪製二叉樹在C

比方說,我有以下的樹。如果我的打印功能只打印數字(按順序遍歷),我會打印出以下內容:1,3,4,6,7,8,10,13,14。

什麼是畫樹像下面考慮的順序被打印的樹的東西,最好的辦法?

我覺得,如果8得到了印刷的第一,隨後3,10等。這將是更容易,但因爲它是中序遍歷1是越來越印刷第一這將是在頂部的第一個print語句。

enter image description here

+0

中序遍歷 – FreeStyle4

+0

權(在該行上面列出),這樣你想知道如何在樹中序遍歷做一個。嘗試搜索「遍歷順序的二叉樹」。 SO內外有很多現有的指南。 – kaylum

回答

0

我大約2年前就是這樣做的一些課程...

我創建了一個包含自己的數據和2個節點,一個左和一個右一個節點結構,它看起來像這樣(我無法找到最後的代碼,這就有可能使用共享指針):

struct node 
{ 
    int data; 
    node *left; 
    node *right; 
}; 

我然後使用遞歸像這樣創建我的樹通過增加更多的節點,以它

void insert(node **tree, int value) 
{ 
    if (*tree == nullptr) 
    { 
     *tree = new node; 
     (*tree)->data = value; 
     (*tree)->left = nullptr; 
     (*tree)->right = nullptr; 
    } 
    else if (value < (*tree)->data) 
    { 
     insert(&((*tree)->left), value);//memory location of the pointer to the node of the node 
    } 
    else if (value > (*tree)->data) 
    { 
     insert(&((*tree)->right), value); 
    } 
    else 
     return; 
} 

旁註:回想起來,我從來不佔添加節點具有相同值作爲現有節點如果這甚至有可能。

我以爲你會做類似的事情。現在對於回答你的問題的那一點,打印出來,也使用遞歸。

void inorder(node *tree) 
{ 
    if (!(tree == nullptr)) 
    { 
     inorder((tree)->left); 
     cout << (tree->data) << endl;//Prints on new lines, you could comma separate them if you really wanted. 
     inorder((tree)->right); 
    } 
} 

最後,你要清理你的樹,你用過它之後,所以你需要刪除它... 遞歸

說實話,它已經有一段時間,這個遞歸東西還是有點混亂給我,讓我幾乎忘記了什麼東西,但理論的存在!

編輯,使用的標題:<iostream><memory>,這也是c++不是c但它們非常相似。