我一直在研究一个基本上应该打印我在程序中的二叉树的函数,我遇到了问题。树是动力的,值是数字,右边会加上较大的新数字,左边会加小。
基本上应该打印树的方式是: 假设只有值为3的根,那么输出将为:
(3)
添加带有值2的节点后:
((2)<(3))
我得到的输出:
(((2))<(3))
添加8后:
((2)<(3)>(8))
我得到的输出:
(((2))<(3)>((8))))
添加7后:
((2)<(3)>((7)<(8)))
我得到的输出:
(((2))<(3)>(((7))<(8)))
依旧...... 注意第一个节点,根有不同的结构,因此saparation为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;
}
会感激任何帮助。 谢谢!
答案 0 :(得分:0)
问题解决了,缺少一个条件:
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&¤tNode->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;
}