【问题标题】:return max and min in a binary tree返回二叉树中的最大值和最小值
【发布时间】:2019-06-05 09:25:36
【问题描述】:

我们想编写一个函数,将二叉树的根作为输入,并使用 PairAns 类返回该树的最大值和最小值。

我在这个问题的基本情况下遇到了一些问题

PairAns minMax(BinaryTreeNode<int> *root) {
    PairAns ans;
    ans.max=INT_MIN;
    ans.min=INT_MAX;
    if(root->left==NULL&&root->right==NULL){
        ans.max=root->data;
        ans.min=root->data;
        return ans;
    } 
    PairAns smallans1=minMax(root->left);
    PairAns smallans2=minMax(root->right);
    ans.max=max(max(smallans1.max,smallans2.max),root->data);
    ans.min=min(min(smallans1.min,smallans2.min),root->data);
    return ans;
}

我希望答案是正确的,但在所有测试用例中都出现运行时错误。

【问题讨论】:

  • 你需要检查root == NULL
  • 那是正确的,但如果我检查叶节点,那么检查它是否有 NULL 节点有什么意义
  • 一些内部节点将只有一个孩子。你的支票没有发现。

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


【解决方案1】:

考虑一棵有两个节点的树。您可以清楚地看到运行时错误。

PairAns minMax(BinaryTreeNode<int> *root) {

    PairAns ans;`enter code here`
    ans.max=INT_MIN;
    ans.min=INT_MAX;

    if(root == NULL)
       return ans;

    if(root->left==NULL&&root->right==NULL){
    ans.max=root->data;
    ans.min=root->data;
    return ans;
    } 
    PairAns smallans1=minMax(root->left);
    PairAns smallans2=minMax(root->right);
    ans.max=max(max(smallans1.max,smallans2.max),root->data);
    ans.min=min(min(smallans1.min,smallans2.min),root->data);
    return ans;
    }

【讨论】:

    猜你喜欢
    • 2012-11-28
    • 2021-01-23
    • 2021-12-19
    • 2021-12-21
    • 2022-11-15
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多