Я написал следующую функцию, чтобы выяснить минимальную сумму любого пути в бинарном дереве поиска:улучшения алгоритмического для нахождения минимальной суммы в бинарном дереве поиска
int minSumPath(TreeNode* root) {
if(root==NULL)
return 0;
int sum = root->value;
if(root->left!=NULL && root->right!=NULL)
sum += min(minSumPath(root->left),minSumPath(root->right));
else
if(root->left==NULL)
sum += minSumPath(root->right);
else
sum += minSumPath(root->left);
return sum;
}
Хотя приведенный выше код генерирует правильный вывод, Я чувствую, что не использую тот факт, что это двоичное дерево поиска (BST), а не только двоичное дерево.
В BST левый дочерний узел меньше корневого и правого узлов, поэтому логически мы можем рассматривать только левые дочерние узлы каждого корня; но что, если у BST есть только один ребенок справа (с значением 10) и несколько дочерних узлов слева (с суммой> 10)?
В этом случае минимальная сумма будет равна 10 (что находится справа).
Как я мог бы использовать свойство BST, если вообще? Кроме того, любые другие оптимизации, которые я могу использовать в моем подходе?
Примечание: Отредактировано код для устранения ошибки;
Рекурсия велика и все, но итеративный подход часто лучше, потому что он не полагается на использование стека для вызовов функций, что может быть дорогостоящим в большом дереве. – JGroven
@ user3112926, в то время как я полностью согласен с вами, сэр, я ищу алгоритмические улучшения. –
Что именно вы подразумеваете под минимальной суммой любого пути? Сумма всех значений узла по пути от корневого узла до любого листа? – Nobody