以递归方式查找二叉树中的最小数字

时间:2015-04-01 07:38:09

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

这就是我的代码的外观

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

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

3 个答案:

答案 0 :(得分:4)

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

树中的最小值是

的最小值
  • 根值
  • 左子树中的值,如果有一个
  • 右侧子树中的值(如果有)

像这样:

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

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分:0)

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

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