LeetCode1448.统计二叉树中好节点的数目(Java)

LeetCode1448.统计二叉树中好节点的数目(Java)_第1张图片

题目

给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。
「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。

question:如何没有图示,你会发现根节点也算是一个好节点吗?
LeetCode1448.统计二叉树中好节点的数目(Java)_第2张图片

输入:root = [3,1,4,3,null,1,5]
输出:4
解释:图中蓝色节点为好节点。
根节点 (3) 永远是个好节点。
节点 4 -> (3,4) 是路径中的最大值。
节点 5 -> (3,4,5) 是路径中的最大值。
节点 3 -> (3,1,3) 是路径中的最大值。

第一次写的时候用了HashSet,以为会有重复的节点,是我多虑了
第二次,讲HashSet改为cnt计数,瞬间快了2ms

int cnt = 0;

	public int goodNodes(TreeNode root) {
		// 从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值
		dfs(root, root.val);
		return cnt;
	}

	public void dfs(TreeNode root, int val) {
		if (root == null) {
			return;
		}
		if (val <= root.val) {
			cnt++;
		}
		dfs(root.left, Math.max(val, root.val));
		dfs(root.right, Math.max(val, root.val));
	}

end.

你可能感兴趣的:(LeetCode刷题)