Бинарное дерево. Эффективный алгоритм подсчёта значений всех вершин правого поддерева каждой вершины
Пример работы алгоритма:
Tree:
16 (sum 48)
/ \
sum(19) 10 18 (sum 25)
/ \ / \
sum(0) 3 19 5 25
sum(0) sum(0) sum(0)
Для каждой вершины дерева считается сумма всех значений правого поддерева. Каждый узел имеет не более двух потомков.
Сам алгоритм, который выдаёт неправильное решение
/**
* Calculate sum of all right children for every node
* @param root node of the tree. Use it to traverse the tree.
* @return node of the tree where for every node is computed sum of it's all right children
*/
public Node rightSum(Node root) {
if (root == null) {
return null;
}
if (root.right != null) {
root.sumOfAllRight += root.sumOfAllRight + root.right.value;
}
rightSum(root.right);
rightSum(root.left);
return root;
}
Class Node :
public class Node {
Node left = null;
Node right = null;
long value;
long sumOfAllRight = 0;
long sumOfAllChildren = 0;}
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
rightSum(root.right);
rightSum(root.left);
root.sumOfAllRight = root.right.sumOfAllChildren;
root.sumOfAllChildren = root.value + root.sumOfAllRight + root.left.sumOfAllChildren;