用C语言表示二叉树的递归函数 问题

用C语言表示二叉树的递归函数 问题,c,recursion,printf,binary-tree,inorder,C,Recursion,Printf,Binary Tree,Inorder,我想按顺序打印二叉树的节点,并想让节点打印出与其所在高度相同的破折号,然后再打印数据 所做的研究 我已经找到了其他类似或的帖子,但我仍然不知道如何以我想要的方式表示我的二叉树,因为它与那些问题上所述的不同 例子 假设我以这种方式插入包含数据的节点: 5,4,2,3,9,8 表示二叉树时,我期望的输出是: -9 --8 5 -4 ---3 --2 玩具示例代码 到目前为止,我能够以正确的顺序打印节点。但是几天后,我仍然不知道如何实现递归函数以获得正确的表示。我也尝试过循环,但发现它更混乱,也没

我想按顺序打印二叉树
的节点,并想让节点打印出与其所在高度相同的破折号,然后再打印数据

所做的研究 我已经找到了其他类似或的帖子,但我仍然不知道如何以我想要的方式表示我的二叉树,因为它与那些问题上所述的不同

例子 假设我以这种方式插入包含数据的节点:

5,4,2,3,9,8
表示二叉树时,我期望的输出是:

-9
--8
5
-4
---3
--2
玩具示例代码 到目前为止,我能够以正确的顺序打印节点。但是几天后,我仍然不知道如何实现递归函数以获得正确的表示。我也尝试过循环,但发现它更混乱,也没有得到正确的结果

问题是破折号的数量不正确,我不确定在递归中需要在哪里追加破折号。我想我可能需要立即重写整个
printbinarytre
代码

下面您可以看到玩具示例代码,该代码可以作为一个整体进行编译:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct repBinaryTree *BinaryTree;

struct repBinaryTree {
  int data;
  BinaryTree left;
  BinaryTree right;
};

BinaryTree newNode() {
  BinaryTree b = new repBinaryTree;
  b->data = NULL;
  b->left = b->right = NULL;
  return b;
}

BinaryTree insertNode(int i, BinaryTree b) {
  if (b==NULL) {
    b = newNode();
    b->data = i;
  } else if ( i < b->data ) {
    if (b->left == NULL) {
      b->left = newNode();
      b->left->data = i;
    } else {
      insertNode(i, b->left);
    }
  } else if ( i > b->data ) {
    if (b->right == NULL) {
      b->right = newNode();
      b->right->data = i;
    } else {
      insertNode(i, b->right);
    }
  }
  return b;
}

char* printBinaryTreeRecurrsively(BinaryTree b, char level[]) {
  if (b == NULL) {
    printf("\n");
    return level;
  } else {
    level = printBinaryTreeRecurrsively(b->right, level);
    printf("%s%d",level,b->data);
    level = printBinaryTreeRecurrsively(b->left, level);
  }
  strcat(level,"-");
  return level;
}

int main () {
  BinaryTree b = insertNode(5,NULL);
  b = insertNode(4, b);
  b = insertNode(2, b);
  b = insertNode(3, b);
  b = insertNode(9, b);
  b = insertNode(8, b);
  printf("Recursive BinaryTree print:");
  char level0[] = "";
  printBinaryTreeRecurrsively(b, level0);
  printf("Expected BinaryTree print:");
  printf("\n-9\n--8\n5\n-4\n---3\n--2\n");
}
问题:
我应该如何立即重写我的
printbinarytre
函数代码,以便获得正确的输出?

将函数改为此

void printBinaryTreeRecurrsively(BinaryTree b, int level) {
  if (b == NULL) {
    printf("\n");
  } else {
    printBinaryTreeRecurrsively(b->right, level+1);
    for (int i = 0; i < level; i++) {
        printf("-");
    }
    printf("%d",b->data);
    printBinaryTreeRecurrsively(b->left, level+1);
  }
}
这种方法比担心字符串连接等要简单得多。只需使用
int
跟踪您所处的级别,打印正确的
-
,然后告诉下面的级别再打印一个
-

void printBinaryTreeRecurrsively(BinaryTree b, int level) {
  if (b == NULL) {
    printf("\n");
  } else {
    printBinaryTreeRecurrsively(b->right, level+1);
    for (int i = 0; i < level; i++) {
        printf("-");
    }
    printf("%d",b->data);
    printBinaryTreeRecurrsively(b->left, level+1);
  }
}
printBinaryTreeRecurrsively(b, 0);