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