值等于子节点值之和的节点数量
难度:
标签:
题目描述
代码结果
运行时间: 304 ms, 内存: 53.1 MB
/*
* 思路:
* 1. 使用递归遍历树的每个节点。
* 2. 使用Java Stream API来计算每个节点的子节点和。
* 3. 如果当前节点值等于其子节点值的和,则计数器加1。
* 4. 最终返回计数器的值。
*/
import java.util.stream.Stream;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public class Solution {
private int count = 0;
public int equalToDescendants(TreeNode root) {
sumDescendants(root);
return count;
}
private int sumDescendants(TreeNode node) {
if (node == null) return 0;
int leftSum = node.left == null ? 0 : sumDescendants(node.left);
int rightSum = node.right == null ? 0 : sumDescendants(node.right);
int totalSum = Stream.of(leftSum, rightSum).mapToInt(Integer::intValue).sum();
if (node.val == totalSum) count++;
return totalSum + node.val;
}
}
解释
方法:
这个题解使用了深度优先搜索(DFS)的方法来遍历整个二叉树。对于每个节点,函数 `dfs` 计算并返回该节点所有子节点的值的总和。在返回之前,如果当前节点的值等于其所有子节点的值的总和,则累加计数器 `ans`。最后,整个树遍历完成后,`ans` 包含了所有符合条件的节点的数量。
时间复杂度:
O(n)
空间复杂度:
O(h)
代码细节讲解
🦆
在`dfs`函数中,如果当前节点是叶子节点,其返回值是什么?
▷🦆
当比较`x.val`与`res`时,是否考虑了有负数值节点的情况?这是否影响算法的正确性?
▷🦆
算法中有提到递归栈深度问题,递归深度是否可能导致栈溢出?在实际应用中如何避免这种情况?
▷🦆
对于非平衡二叉树,这种DFS方法的效率如何?是否有更优的算法来处理这种情况?
▷