2015-02-08 64 views
0

二叉搜索树我已在有序打印按顺序使用括号

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)<(3)>(8)) 但是当将7添加到树上以打印它时,如下:((2)<(3)>((7)<(8) )))。 就像至少有一个节点的每棵树都必须放在括号内。 有没有办法做到递归?

+0

'“((2)<(3)>((7)<(8) ))“'是一个奇怪的结果(不平衡的'<>')。你是否确定这正是期望的输出? – chux 2015-02-08 12:46:49

+0

@chux根据op的既定目标,在<<>中没有保证的“平衡”,例如:树只有一边有孩子。然而,我仍然对“问题”*失去了兴趣,因为如果我理解了目标,OP的输出似乎是正确的。 – WhozCraig 2015-02-08 12:54:15

+0

@WhozCraig是的,我也希望OP解释更多。例如:“2,3,8”是一个列表,而不是一棵树,许多不同的树可以有“2,3,8”的元素。虽然我确信“添加括号”的意思是“添加括号和尖括号”。 – chux 2015-02-08 13:01:07

回答

0

你可以用 '包围' 中的代码与两个括号你print1功能,并为空的检查,比如:

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