gpt4 book ai didi

c - 在c中绘制二叉树到控制台

转载 作者:行者123 更新时间:2023-11-30 16:58:51 26 4
gpt4 key购买 nike

我想指出的是,在提出我的问题之前我已经看到了这篇文章: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

最佳答案

大约两年前,我为了一些类(class)作业做了这个...

我创建了一个节点结构,其中包含自己的数据和 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);
}
}

最后,您需要在使用树后清理它,因此您需要删除它......递归地

说实话,已经有一段时间了,这个递归的事情对我来说仍然有点困惑,所以我可能忘记了一些东西,但理论就在那里!

编辑,使用的 header :<iostream><memory> ,这也是c++不是c但它们非常相似。

关于c - 在c中绘制二叉树到控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38516997/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com