2013-04-12 39 views
-1

我需要打印堆的所有树叶,但我不知道如果我做得正确。打印堆的所有树叶

例如:数组{A,B,C,d,E,F,G,H,I,J}

    A 
       B  C 
      D E F G 
      H I J 

所以我的功能应该打印:HIJFG

这是正确的?

void leafdisplay(node *p) 
{ 
    if(p->left ==NULL && p->right ==NULL) 
    { 
     cout<<p->info; // display the node 
    } 
    else if (p->left==NULL&&p->right!=NULL) 
     leafdisplay(p->right); 
    else if(p->left!=NULL&&p->right==NULL) 
     leafdisplay(p->left); 
    else if(p->left!=NULL&&p->right!=NULL) 
     leafdisplay(p->left);  
    leafdisplay(p->right); 
} 
+2

你尝试编译它了吗? – Koterpillar

+1

另外,提示:你是否需要在同一时间检查左右子树_? – Koterpillar

+0

进行深度优先搜索(左递归然后递归右),并在每次没有离开和没有权限时打印出来。然后你会很快打印出所有的叶子:) – Patashu

回答

0

缺少{ }最后否则,如果循环

else if(p->left!=NULL&&p->right!=NULL) 
{ 
    leafdisplay(p->left);  
    leafdisplay(p->right); 
} 

而且可以优化你的代码是这样

void leafdisplay(node *p) 
{ 
    if(p->left ==NULL && p->right ==NULL) 
    { 
    cout<<p->info; // display the node 
    } 
    else if (p->left==NULL) 
    leafdisplay(p->right); 
    else if(p->right==NULL) 
    leafdisplay(p->left); 
    else 
    { 
    leafdisplay(p->left);  
    leafdisplay(p->right); 
    } 
}