【问题标题】:print in-order binary search tree with parentheses打印带括号的有序二叉搜索树
【发布时间】:2015-02-08 12:30:39
【问题描述】:

我制作了一个递归函数,可以按顺序打印一棵树

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)(8)) 但是当将 7 添加到树中以按如下方式打印它时:((2)((7)

【问题讨论】:

  • "((2)&lt;(3)&gt;((7)&lt;(8)))" 是一个奇怪的结果(不平衡的&lt;&gt;)。您确定这正是所需的输出吗?
  • @chux 根据操作的既定目标,&lt;&gt; 中没有保证的“平衡”,例如:如果一棵树只有一侧有孩子。但是,我仍然不知道 problem 是什么,因为如果我理解目标,OP 的输出至少看起来是正确的。
  • @WhozCraig 是的,我也希望 OP 解释更多。示例:“2,3,8”是一个列表,而不是一棵树,许多不同的树可能有“2,3,8”的元素。虽然我确信“加括号”的意思是“加括号和尖括号”。
  • 好的,现在我明白了。 ((2)&lt;(3)&gt;((7)&lt;(8)))目标,而这段代码没有 这样做。 (呃)。我理解输出。你得盯着看=P
  • 抱歉信息不足,说明是左()

标签: c tree


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多