2014-10-03 2 views
-5

Я борюсь со следующим вопросом: «Учитывая двоичное дерево, в котором каждый элемент узла содержит число. Найдите максимально возможную сумму из одного листового узла к другому. Путь максимальной суммы может или не может проходить через корень ». Я хочу написать решение O (n), обсуждаемое здесь: http://www.geeksforgeeks.org/find-maximum-path-sum-two-leaves-binary-tree/, но у меня проблема, так как java передается по значению. Может кто-нибудь помочь?Найти максимальную сумму пути между двумя листами двоичного дерева (Java)

EDIT: это мой метод

private static int fromRoot(TreeNode root, int[] res){ 
    if(root == null) 
     return 0; 
    int left = fromRoot(root.left, res) + root.val; 
    int right = fromRoot(root.right, res) + root.val; 
    int max = Math.max(Math.max(left, right), left+right+root.val); 
    if(max > res[0]) 
     res[0] = max; 
    return Math.max(left, right); 
} 

INT переменной res я сохранить вывод. То, что делает этот код, - это сумма всех узлов из дерева.

+0

Waitaminute. Почему именно Java проходит по значению проблему? – Makoto

+0

@ user2040251 Я обновил описание – sammy333

ответ

1

Ваш код явно отличается от кода в статье (и он не имеет никакого отношения к используемому языку).

В своем коде, это:

int left = fromRoot(root.left, res) + root.val; 
int right = fromRoot(root.right, res) + root.val; 
... 
return Math.max(left, right); 

Но это должно быть:

int left = fromRoot(root.left, res); 
int right = fromRoot(root.right, res); 
... 
return Math.max(left, right) + root.val; 
+0

Спасибо, я отредактировал, и это действительно сработало, но я не вижу почему? В чем разница между этими двумя подходами? – sammy333

+0

@ user3371223 Разница заключается в строке, в которой вычисляется 'max'. – kraskevich