列表

详情


2265. 统计值等于子树平均值的节点数

给你一棵二叉树的根节点 root ,找出并返回满足要求的节点数,要求节点的值等于其 子树 中值的 平均值

注意:

 

示例 1:

输入:root = [4,8,5,0,1,null,6]
输出:5
解释:
对值为 4 的节点:子树的平均值 (4 + 8 + 5 + 0 + 1 + 6) / 6 = 24 / 6 = 4 。
对值为 5 的节点:子树的平均值 (5 + 6) / 2 = 11 / 2 = 5 。
对值为 0 的节点:子树的平均值 0 / 1 = 0 。
对值为 1 的节点:子树的平均值 1 / 1 = 1 。
对值为 6 的节点:子树的平均值 6 / 1 = 6 。

示例 2:

输入:root = [1]
输出:1
解释:对值为 1 的节点:子树的平均值 1 / 1 = 1。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: int averageOfSubtree(TreeNode* root) { } };

golang 解法, 执行用时: 4 ms, 内存消耗: 4.3 MB, 提交时间: 2022-11-12 13:07:02

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func averageOfSubtree(root *TreeNode) (ans int) {
	var dfs func(*TreeNode) (int, int)
	dfs = func(node *TreeNode) (int, int) {
		sum, cnt := node.Val, 1
		if node.Left != nil {
			s, c := dfs(node.Left)
			sum += s
			cnt += c
		}
		if node.Right != nil {
			s, c := dfs(node.Right)
			sum += s
			cnt += c
		}
		if node.Val == sum/cnt {
			ans++
		}
		return sum, cnt
	}
	dfs(root)
	return
}

python3 解法, 执行用时: 44 ms, 内存消耗: 16.3 MB, 提交时间: 2022-11-12 13:06:19

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def averageOfSubtree(self, root: Optional[TreeNode]) -> int:
        # 相当于先序遍历了 
        def dfs(root: Optional[TreeNode]) -> (int, int):
            nonlocal ans 
            if not root:
                return 0, 0
            
            l = dfs(root.left)
            r = dfs(root.right)
            # value左右子树之和,count左右子树节点总和
            value = l[0] + r[0] + root.val
            count = l[1] + r[1] + 1
            if root.val == value // count:
                ans += 1
            return value, count
        
        # 主函数
        ans = 0
        dfs(root)
        return ans

上一题