簡體   English   中英

二叉樹級別總和-

[英]Binary Tree Level Sum -

一個基本的Java示例:給定一個二叉樹和一個整數,它是目標級別的深度。 並計算目標級別中節點的總和。

我將函數中的值添加到左側和右側節點。 為什么這種解決方案在這種情況下不起作用,有人可以幫忙解釋一下嗎?

同樣,當travese函數返回時,它返回父根還是更像break; 在循環中,流程停止了嗎?

private int sum;

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

public 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);
    }
}

首先,您沒有返回求和的結果。 您將不得不退還它。

然后,由於您寫的是“在目標級別”,因此我想您只需要總結目標級別中的節點,而不是該級別之前的節點。

嘗試這個:

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM