c - 打印堆的所有叶子

标签 c pointers heap nodes

我需要打印出堆的所有叶子,但我不确定我是否做得正确。

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

                  A
              B       C
           D    E   F   G
          H I  J   

所以我的函数应该打印:H I J F G

这是正确的吗?

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);
}

最佳答案

最后一个 else if 循环缺少 { }

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);
  }
}

关于c - 打印堆的所有叶子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15962855/

相关文章:

c - 为什么在给定 *string 时 strtok 会出现段错误,而在给定 string[] 时却不会?

c - 数组,其中每个偶数索引以 2 为动力,奇数索引以 3 为动力

在 C 代码中调用两个函数会停止程序

c++ - 将元组的 vector 转换/构造为堆

algorithm - 平滑排序算法在哪里使用?

python - Dijkstra + 堆(自行实现)

python - 除了显示之外,打印功能实际上做了什么?

c - 如何安装和运行 Eclipse CDT 的 iniparser?

c - [ansi c] 将 bitifield 作为引用

pointers - 为指针类型的字段赋值的简写是什么