【问题标题】:Print all leaves of a Heap打印堆的所有叶子
【发布时间】:2013-04-12 04:04:33
【问题描述】:

我需要打印出一个堆的所有叶子,但我不确定我是否正确地完成了它。

例如:数组{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);
}

【问题讨论】:

  • 你尝试编译了吗?
  • 另外,提示:您是否需要同时检查左右子树
  • 进行深度优先搜索(向左递归然后向右递归)并在每次没有左和右时打印出来。然后你会很快打印出所有的叶子:)
  • 跟进 Kotepillar 的评论,您是否尝试过 running 呢?

标签: c pointers heap nodes


【解决方案1】:

最后一个 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);
  }
}

【讨论】:

    猜你喜欢
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多