用括号打印有序二进制搜索树

时间:2015-02-08 12:30:39

标签: c tree

我已经制作了一个按顺序打印树的递归函数

void print_tree(TREE_TYPE eType,Tree* root) {
    if (eType == TREE_TYPE_INT)
        print1(TREE_TYPE_INT, root);

    if (eType == TREE_TYPE_CHAR)
        print1(TREE_TYPE_INT, root);
}

void print_element(TREE_TYPE eType, void* data) {
    if (eType == TREE_TYPE_INT) {
        printf("(%d)", *((int*)data));
    } else if (eType == TREE_TYPE_CHAR) {
        printf("(%c)", *((char*)data));
    }
}

void print1(TREE_TYPE eType, Tree* root) {
    if (root == NULL)
        return;

    if (root->left) {
        print1(eType, root->left);
        printf("<");
    }
    print_element(eType, root->data);

    if (root->right) {
        printf(">");
        print1(eType, root->right);
    }

}

现在我必须以下面的方式为一棵树添加括号,用2,3,8打印结果:((2)&lt;(3)&gt;(8)) 但是当将7添加到树中以按如下方式打印时:((2)&lt;(3)&gt;((7)&lt;(8)))。 就像每个至少有一个节点的树必须在括号中。 有办法递归吗?

1 个答案:

答案 0 :(得分:0)

您可以使用两个括号“围绕”print1函数中的代码,并检查null,如下所示:

if (root->left || root->right) printf("(");