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