バイナリ検索ツリーの順序通りのトラバースを実行し、任意の2つのノードの値間の最小絶対差を求めるコードを記述します。私はこのコードを書いて、私が代わりに結果1を返すのでは、このテストケースを実行すると、それはここでCプログラムのポインタに問題がある
2.テストケースで結果スローされます。ここでは
2
/ \
1 4
は私が書くコードです:
あなたが見ることができるように、唯一の最後のノードがnullでない
(nil)
(nil)
0xfe72b0
:ここ
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
void inOrder(struct TreeNode* temp1, struct TreeNode* temp2, int* result) {
if (temp1->left != NULL) {
inOrder(temp1->left, temp2, result);
}
if (temp2 != NULL) {
int dif = temp1 -> val - temp2 -> val;
*result = *result > dif ? dif : *result;
}
printf("%p\n", temp2);
temp2 = temp1;
if (temp1->right != NULL) {
inOrder(temp1->right, temp2, result);
}
}
int getMinimumDifference(struct TreeNode* root) {
int result = 0x7fffffff;
struct TreeNode* temp = NULL;
inOrder(root, temp, &result);
return result;
}
はprintf関数の出力です。コードのロジックに基づいて、2つの非ヌルプリントが存在する必要があるため、これは異常です。
このバグを解決するのを手伝ってください。
' INORDER(temp1->左、TEMP2、結果を)スニペット以下試してみてください? –
デバッガを使用したことがありますか –