我想在发出问题之前已经看过这篇文章:C How to "draw" a Binary Tree to the console
我们说我有以下树。如果我的打印功能只打印数字(按顺序遍历),我会打印出以下内容:1,3,4,6,7,8,10,13,14。
考虑到树按此顺序打印,在下面绘制树的最佳方法是什么?
我觉得如果8首先打印后跟3,10等...这会更容易但是因为它是按顺序遍历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
,但它们非常相似。