在c中按顺序递归打印二叉树
我一直在做一个函数,基本上应该是打印程序中的二叉树,我遇到了一个问题。树是动态的,值是数字,较大的新数字将添加到右侧,较小的新数字将添加到左侧 基本上,打印树的方式是: 假设只有值为3的根,则输出为:在c中按顺序递归打印二叉树,c,recursion,tree,binary-tree,C,Recursion,Tree,Binary Tree,我一直在做一个函数,基本上应该是打印程序中的二叉树,我遇到了一个问题。树是动态的,值是数字,较大的新数字将添加到右侧,较小的新数字将添加到左侧 基本上,打印树的方式是: 假设只有值为3的根,则输出为: (3) 添加值为2的节点后: ((2)<(3)) ((2)right==NULL&&root->left==NULL){ 根->打印对象(根->值); printf(“\n”); }否则{ printf(“(”); if(isFirst==TRUE){ 如果(根->左!=NULL){ 打
(3)
添加值为2的节点后:
((2)<(3))
((2)right==NULL&&root->left==NULL){
根->打印对象(根->值);
printf(“\n”);
}否则{
printf(“(”);
if(isFirst==TRUE){
如果(根->左!=NULL){
打印树(根,根->左,假);
printf(“”);
打印树(根,根->右,假);
}
}否则{
如果(currentNode->left!=NULL){
打印树(根,当前节点->左,假);
printf(“”);
PrintTree(根,currentNode->right,FALSE);
}
}
printf(“)”;
}
返回;
}
void PrintObject(void*值){
printf((%d)”,*(int*)值;
返回;
}
非常感谢您的帮助。
谢谢 问题已解决,缺少一个条件:
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;
}
void打印树(根*Root,节点*currentNode,布尔值isFirst)
{
if(root==NULL)
返回;
else if(root->right==NULL&&root->left==NULL)
{
根->打印对象(根->值);
返回;
}
else if(currentNode!=NULL)
{
if(currentNode->left==NULL&¤tNode->right==NULL&&isFirst==FALSE)
根->打印对象(当前节点->值);
返回;
}
其他的
{
printf(“(”);
if(isFirst==TRUE)
{
如果(根->左!=NULL)
{
打印树(根,根->左,假);
printf(“”);
打印树(根,根->右,假);
}
}
其他的
{
如果(currentNode->left!=NULL)
{
打印树(根,当前节点->左,假);
printf(“”);
PrintTree(根,currentNode->right,FALSE);
}
}
printf(“)”;
}
返回;
}
根->打印对象(…)
看起来不正确。你也可以通过在根节点上使用类型Node来简化一切。嘿,我不明白root->PrintObject()中有什么问题?啊,对不起,我错过了关于括号太多的句子。(嗯,root->PrintObject
不应该在C
中编译,除非root
包含一个成员PrintObject
,它是指向函数的指针,我真的不知道它是否是。没关系。)你能提供一个例子,说明你得到的是什么输出,你需要什么吗?代码上面已经提供了这个例子,我举了几个例子。我必须先学会正确阅读。很抱歉因此,如果我的想法正确,您的代码将为叶节点(即没有子节点的节点)打印额外的括号。我建议不要打印这些括号。您已经有了一个条件来处理根节点的这种情况(root->left==NULL&&root->right==NULL
),但它对其他节点没有帮助。只需为currentNode添加一个类似的。
((2)<(3)>(8))
(((2))<(3)>((8))))
((2)<(3)>((7)<(8)))
(((2))<(3)>(((7))<(8)))
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&¤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;
}