2017-05-14 12 views
0

バイナリ検索ツリーの順序通りのトラバースを実行し、任意の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つの非ヌルプリントが存在する必要があるため、これは異常です。

このバグを解決するのを手伝ってください。

+0

' INORDER(temp1->左、TEMP2、結果を)スニペット以下試してみてください? –

+1

デバッガを使用したことがありますか –

答えて

0

コードtemp2は常にNULLです。 `それは` INORDER(temp1->左、TEMP1、結果)すべきではない; `

void inOrder(struct TreeNode* temp1, struct TreeNode* temp2, int* result) { 
    if (temp1->left != NULL) { 
     inOrder(temp1->left, temp1, result); 
    } 
    if (temp2 != NULL) { 
     int dif = temp1 -> val - temp2 -> val; 
     if(dif < 0) dif *= -1; //absolute diff 
     *result = *result > dif ? dif : *result; 
    } 
    printf("%p\n", temp2); 
    //temp2 = temp1; 
    if (temp1->right != NULL) { 
     inOrder(temp1->right, temp1, result); 
    } 
} 
+0

これは正しくないようです。木{5、{2、NULL、{4、NULL、NULL}}、NULL} 'を考えてみましょう。あなたのコードは '2'を返しませんか? – melpomene

+0

グラフまたは接続されたノードの2つのノードの最小の違いを探していますか?グラフモデルと期待される結果であなたの質問を '5、2、4'で更新してください。 – Ajay

+0

それは私の質問ではありませんが、 "*任意の2つのノードの値の間の最小絶対差を見いだす"と言います。 – melpomene

関連する問題