2016-07-22 104 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但它们非常相似。