安慰我只是想指出,我已經看到了這個帖子問我的問題之前: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語句。
安慰我只是想指出,我已經看到了這個帖子問我的問題之前: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語句。
我大約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
但它們非常相似。
中序遍歷 – FreeStyle4
權(在該行上面列出),這樣你想知道如何在樹中序遍歷做一個。嘗試搜索「遍歷順序的二叉樹」。 SO內外有很多現有的指南。 – kaylum