在c中绘制二进制树到控制台

时间:2016-07-22 01:54:26

标签: c tree binary-tree tree-traversal inorder

我想在发出问题之前已经看过这篇文章:C How to "draw" a Binary Tree to the console

我们说我有以下树。如果我的打印功能只打印数字(按顺序遍历),我会打印出以下内容:1,3,4,6,7,8,10,13,14。

考虑到树按此顺序打印,在下面绘制树的最佳方法是什么?

我觉得如果8首先打印后跟3,10等...这会更容易但是因为它是按顺序遍历1首先打印,这将是顶部的第一个打印声明。

enter image description here

1 个答案:

答案 0 :(得分:0)

我大约两年前做了一些课程作业......

我创建了一个节点结构,其中包含自己的数据和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,但它们非常相似。