gpt4 book ai didi

c - 在c中递归按顺序打印二叉树

转载 作者:行者123 更新时间:2023-11-30 19:44:28 26 4
gpt4 key购买 nike

我一直在开发一个函数,该函数基本上应该打印程序中的二叉树,但我遇到了问题。树是动态的,值是数字,较大的新数字将添加在右侧,较小的数字将添加在左侧。

基本上,树的打印方式是这样的:假设只有根值为 3,那么输出将是:

(3)

添加值为 2 的节点后:

((2)<(3))

我得到的输出:

(((2))<(3))

添加8后:

((2)<(3)>(8))

我得到的输出:

(((2))<(3)>((8))))

添加7后:

((2)<(3)>((7)<(8)))

我得到的输出:

(((2))<(3)>(((7))<(8)))

等等...请注意,第一个节点(根)具有不同的结构,因此分为 2 种情况。

主要问题是我得到了太多括号。

这是我到目前为止编写的代码:

void PrintTree(Root* root, Node* currentNode,Boolean isFirst) {
if (root == NULL)
return;
else if (root->right == NULL && root->left == NULL) {
root->PrintObject(root->value);
printf("\n");
} else {
printf("(");
if (isFirst == TRUE) {
if (root->left != NULL) {
PrintTree(root,root->left, FALSE);
printf("<");
}
root->PrintObject(root->value);

if (root->right != NULL) {
printf(">");
PrintTree(root,root->right, FALSE);
}
} else {
if (currentNode->left != NULL) {
PrintTree(root,currentNode->left, FALSE);
printf("<");
}

root->PrintObject(currentNode->value);

if (currentNode->right != NULL) {
printf(">");
PrintTree(root,currentNode->right, FALSE);
}
}
printf(")");
}
return;
}

void PrintObject(void* value) {
printf("(%d)", *(int*)value);
return;
}

非常感谢任何形式的帮助。谢谢!

最佳答案

问题已解决,缺少一个条件:

void PrintTree(Root* root, Node* currentNode,Boolean isFirst)
{
if (root==NULL)
return;
else if (root->right==NULL&&root->left==NULL)
{
root->PrintObject(root->value);
return;
}
else if (currentNode!=NULL)
{
if(currentNode->left==NULL&&currentNode->right==NULL&&isFirst==FALSE)
root->PrintObject(currentNode->value);
return;
}
else
{
printf("(");
if (isFirst==TRUE)
{
if (root->left!=NULL)
{
PrintTree(root,root->left,FALSE);
printf("<");
}
root->PrintObject(root->value);

if (root->right!=NULL)
{
printf(">");
PrintTree(root,root->right, FALSE);
}
}
else
{

if (currentNode->left!=NULL)
{
PrintTree(root,currentNode->left, FALSE);
printf("<");
}

root->PrintObject(currentNode->value);

if (currentNode->right!=NULL)
{
printf(">");
PrintTree(root,currentNode->right, FALSE);
}
}
printf(")");
}
return;
}

关于c - 在c中递归按顺序打印二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28137640/

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