2015-02-08 63 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("(");