Easy-25

leetcode   530. Minimum Absolute Difference in BST           

Given a binary search tree with non-negative values, find the minimum absolute difference between values of any two nodes.

Example:

Input:

   1
    \
     3
    /
   2

Output:
1

Explanation:
The minimum absolute difference is 1, which is the difference between 2 and 1 (or between 2 and 3).

Note: There are at least two nodes in this BST.

WA:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
int travel1(struct TreeNode* root)
{
    if(root->left!=NULL)
    {
        return travel1(root->left);
    }
    else
    {
        return root->val;
    }
}
int travel2(struct TreeNode* root)
{
    if(root->left!=NULL)
    {
        return travel1(root->left);
    }
    else if(root->right!=NULL)
    {
        return travel1(root->right);
    }
    else
    {
        return grandfather node val;  ///此处无法实现。。。。。
    }
}
int getMinimumDifference(struct TreeNode* root) {
    int minValue1,minValue2;
    minValue1=travel1(root);
    minValue2=travel2(root);
    return abs(minValue1-minValue2);
}


WA:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
int A[1000000];
int length=0;
int travel(struct TreeNode* root)
{
    if(root->left!=NULL)
    {
        travel(root->left);
    }
    A[length]=root->val;
    length++;
    if(root->right!=NULL)
    {
        travel(root->right);
    }
    return 0;
}
int getMinimumDifference(struct TreeNode* root) {
    travel(root);
    int min=abs(A[0]-A[1]);
    for(int i=1;i<length-1;i++)
    {
        if(min>abs(A[i]-A[i+1]))
        {
            min=abs(A[i]-A[i+1]);
        }
    }
    return min;
}

tip: 第二次提交时,出现下面的情况,不知道是不是bug

WA:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
int getMinimumDifference(struct TreeNode* root) {
    if(root==NULL)
    {
        return 0;
    }
    int leftDiff=65536,rightDiff=65536,leftmin=0,rightmin=0;
    if(root->left!=NULL)
    {
        leftDiff=getMinimumDifference(root->left);
        leftmin=root->left->val;
    }
    if(root->right!=NULL)
    {
        rightDiff=getMinimumDifference(root->right);
        rightmin=root->right->val;
    }
    int result=leftDiff<rightDiff?leftDiff:rightDiff;
   
    if(root->left!=NULL)
    {
        leftDiff=abs(root->val-leftmin);
        result=leftDiff<result?leftDiff:result;
    }
    if(root->right!=NULL)
    {
        rightDiff=abs(root->val-rightmin);
        result=result<rightDiff?result:rightDiff;
    }
    if(root->left!=NULL&&root->val>leftmin)
    {
        root->val=leftmin;
    }
    if(root->right!=NULL&&root->val>rightmin)
    {
        root->val=rightmin;
    }
    return result;
}

tips:想之前一篇文章一样,递归,修改树原来的值,每次递归中根节点值修改为其所有子树中的最小值,但是还是错了。



我觉得这个应该是对的,中序排序

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
 int A[100000];
 int length=0;
void travel(struct TreeNode* root)
{
    if(root==NULL)
    {
        return ;
    }
    if(root->left!=NULL)
    {
        travel(root->left);
    }
    A[length]=root->val;
    length++;
    if(root->right!=NULL)
    {
        travel(root->right);
    }
}
int compare(const void *a,const void *b)
 {
     return *(int *)a-*(int *)b;
 }
int getMinimumDifference(struct TreeNode* root) {
    travel(root);
    qsort(A,length,sizeof(A[0]),compare);
    int result=abs(A[0]-A[1]);
    for(int i=1;i<length-1;i++)
    {
        if(result>abs(A[i]-A[i+1]))
        {
            result=abs(A[i]-A[i+1]);
        }
    }
    return result;
}

测试代码过了,递交代码错了,但是递交不过的样例和测试代码的输入样例是一样的,所以我觉得是检测程序的bug

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值