2016-05-12 2 views
0

Базовый образец Java: задано двоичное дерево и целое число, которое является глубиной целевого уровня. И вычислить сумму узлов на целевом уровне.Уровень двоичного уровня дерева -

Я добавляю значение в функции слева и справа. Почему это решение не работает в этом случае, может ли кто-нибудь помочь объяснить?

Также, когда функция travese была возвращена, возвращается ли она к корню родителя или больше, как break; в цикл for, и поток был остановлен?

private int sum; 

public int levelSum(TreeNode root, int level) { 
    sum = 0; 
    traverse(root, 1, level, 0); 
    return sum; 

} 

pubic void traverse(TreeNode root, int depth, int level, int sum){ 
    if(root == null){ 
     return; 
    } 

    if(depth == level){ 
     return; 
    } 

    if(root.left != null) { 
    traverse(root.left, depth + 1, level, sum + root.left.val); 
    } 

    if(root.right != null) { 
    traverse(root.right, depth + 1, level, sum + root.right.val); 
    } 

} 
+0

для инициализации За исключением, вы никогда не назначить 'sum' в' levelSum' рутина. И 'traverse' возвращает' void', поэтому у вас нет способа передать промежуточные значения 'sum' для резервного копирования стека вызовов. Вероятно, вы должны объединить эти две процедуры в одну функцию, которая возвращает 'int'. –

+0

Я не вижу цикла 'for' в вашем опубликованном коде, поэтому я не могу ответить на ваш последний вопрос. – MikeCAT

ответ

0

Прежде всего, вы не вернули результат суммирования. Вам придется вернуть его.

Тогда, поскольку вы написали «на целевом уровне», я думаю, вам придется суммировать узлы только на целевом уровне, а не в узлах перед уровнем.

Попробуйте это:

public int levelSum(TreeNode root, int level) { 
    return traverse(root, 1, level); 

} 

public void traverse(TreeNode root, int depth, int level){ 
    int sum = 0; 

    if(root == null || depth > level){ 
     return 0; 
    } 

    if (depth == level) sum += root.val; 

    if(root.left != null) { 
     sum += traverse(root.left, depth + 1, level); 
    } 

    if(root.right != null) { 
     sum += traverse(root.right, depth + 1, level); 
    } 

    return sum; 
} 
Смежные вопросы