计算二叉树的某层节点之和。
样例
例1:
输入:
1
/ \
2 3
/ \ / \
4 5 6 7
/ \
8 9
和depth= 2
输出:5
例2:
输入:
1
/ \
2 3
/ \ / \
4 5 6 7
/ \
8 9
和depth= 3
输出:22
解题思路1:
BFS.
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: the root of the binary tree
* @param level: the depth of the target level
* @return: An integer
*/
public int levelSum(TreeNode root, int level) {
// write your code here
if(root == null)
return 0;
LinkedList<TreeNode> queue = new LinkedList<>();
queue.offer(root);
int curLevel = 0; //当前层数
while(!queue.isEmpty()){
int len = queue.size();
curLevel++;
int levSum = 0; //当前层数的和
while(len-- != 0){
TreeNode node = queue.poll();
levSum += node.val;
if(node.left != null)
queue.offer(node.left);
if(node.right != null)
queue.offer(node.right);
}
if(level == curLevel)
return levSum;
}
return 0;
}
}
解题思路2:
分治法。
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: the root of the binary tree
* @param level: the depth of the target level
* @return: An integer
*/
public int levelSum(TreeNode root, int level) {
// write your code here
if(root == null || level == 0)
return 0;
if(level == 1)
return root.val;
return levelSum(root.left, level - 1) + levelSum(root.right, level - 1);
}
}