Я пытаюсь реализовать функцию, которая вернет сумму кратчайшего пути в двоичном дереве. Я получаю неправильный ответ 8 вместо 4 для следующего дерева.Найти сумму кратчайшего корня в путь листа в двоичном дереве
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 для следующего исследования пути.
Попробуйте решить возникшую проблему бумагой и карандашом. И начните изучать, как использовать отладчик. –