【问题标题】:Finding the minimum number in a Binary Tree recursively递归查找二叉树中的最小数
【发布时间】:2015-06-05 18:38:04
【问题描述】:

这就是我的代码的样子

int main() {
//root is the rootnode of the tree
    if(root!==NULL) {
        int mini = min(root, root->data);
        printf("minimum number is %d", mini);
    }
    return 0;
}

int min(node *root, int mini) {

    if(root == NULL) {
        return;
    }
    min(root->left, mini);
    min(root->right, mini);
    if(mini > root->data) {
        mini = root->data;
    }
    return mini;
}

它没有给我树中的最小数字。相反,它将根节点打印为最小值。

【问题讨论】:

  • min(root->left, mini); - 你认为这条线到底做了什么?
  • 不,那不是那行的作用……想想看,min 函数是做什么的? (或者至少,它应该做什么?)
  • 提示:为什么你的递归函数返回一个整数?被丢弃?
  • 哦,是的!我正在丢弃它。相同的代码适用于以下两行。迷你=分钟(根->左,迷你); mini = min(root->right, mini);谢谢(y)

标签: c++ c recursion data-structures binary-tree


【解决方案1】:

这对我有用。不丢弃返回值。

int main() {
//root is the rootnode of the tree
    if(root!==NULL) {
        int mini = min(root, root->data);
        printf("minimum number is %d", mini);
    }
    return 0;
}

int min(node *root, int mini) {

    if(root == NULL) {
        return;
    }
    mini = min(root->left, mini);
    mini = min(root->right, mini);
    if(mini > root->data) {
        mini = root->data;
    }
    return mini;
}

【讨论】:

  • 代码无法编译。 if(root == NULL) { return; } 没有返回 int。我猜你想return mini;
【解决方案2】:

您需要使用递归调用的结果,而不是丢弃它们。
它们应该是子树的最小值。

一棵树中的最小值是最小的

  • 根值
  • 左子树中的值,如果有的话
  • 右子树中的值,如果有的话

像这样:

int min(node *root)
{
    int least = root->data;
    if (root->left != NULL)
    {
        least = std::min(least, min(root->left));
    }
    if (root->right != NULL)
    {
        least = std::min(least, min(root->right));
    }
    return least;
}

【讨论】:

  • 我怀疑你的代码会起作用。似乎它只是覆盖了least 而没有与当前的最小值进行比较。
  • @nielsen 你应该查一下std::min
  • @ molbdnilo - 我被两个名称为 min 的函数所愚弄。我的错误 - 抱歉。
【解决方案3】:

试试这个:

int min(node *root, int mini) {

    if(root == NULL) {
        return -1;
    }
    int a;
    a=min(root->left, mini);
    if(a<mini)
        mini=a;
    a=min(root->right, mini);
    if(a<mini)
        mini=a;
    if(root->data<mini)
        mini = root->data;
    return mini;
}

【讨论】:

  • 在 NULL 的情况下返回 -1 似乎很奇怪。
  • 在树为空的情况下返回 -1。
  • 因为您的代码在调用min(root-&gt;...) 之前没有检查root-&gt;leftroot-&gt;right 是否为NULL,所以您的代码将始终在叶子处使用NULL 指针调用。如果一棵树由纯正数据组成,您的代码将始终给出结果 -1。我认为您需要在输入 NULL 指针的情况下返回 mini
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-24
  • 2016-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-19
相关资源
最近更新 更多