-2
私はバイナリツリーの最短パスの合計を返す関数を実装しようとしています。私は次のツリーに対して4の代わりに8という誤った答えを得ています。バイナリツリーの最短ルートからリーフパスの合計を求める
1
/\
2 3
/\
4 5
int sumOfShortestPath(BinaryTreeNode *root, std::vector<int> vec) {
if(!root) return 0;
static int minPathLength = INT_MAX;
static int pathLength = 0;
static int sum = 0;
vec.push_back(root -> data);
pathLength++;
if(root -> left == NULL and root -> right == NULL) {
if(pathLength < minPathLength){
minPathLength = pathLength;
sum = sum_vector(vec);
pathLength = 0;
}
}
sumOfShortestPath(root -> left, vec);
sumOfShortestPath(root -> right, vec);
return sum;
}
私は私のロジックが正しいと信じていますが、私は間違っているつもりだところわかりませんよ。基本的には、小さいパスに遭遇した場合は、minPathLength
とsum
を更新し、次のパス探索のためにpathLength
を0にリセットし直します。
紙と鉛筆で問題を解決しようとします。そして、デバッガの使い方を学びましょう。 –