在c中递归地打印二叉树

时间:2015-01-25 14:42:54

标签: c recursion tree binary-tree

我一直在研究一个基本上应该打印我在程序中的二叉树的函数,我遇到了问题。树是动力的,值是数字,右边会加上较大的新数字,左边会加小。

基本上应该打印树的方式是: 假设只有值为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;
}

会感激任何帮助。 谢谢!

1 个答案:

答案 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&&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;
}