听说12306又崩了。。。
马上就要到五一了,今年的五一也是连休5天,很多人想利用这个时间回趟老家或者出去游玩,所以这段时间也是买票流量的高峰期。据12306显示今天只能购买到4月30号的票,5月1号的票暂时还不能购买。
结果今天早上一条12306崩了的消息登上了热搜,有不少网友反应今天早上买票的时候出现故障,网友也是非常愤怒,希望换程序员。实际上12306崩过也不是这一回了,没办法,流量太大,尤其是春节以及五一,十一这种长假,流量都会集中爆发。我刚试了下,没有出现奔溃的现象,应该是修复了,有需要的现在可以购买了。
输入:root = [3,1,4,3,null,1,5]
输出:4
解释:图中蓝色节点为好节点。
根节点 (3) 永远是个好节点。
节点 4 -> (3,4) 是路径中的最大值。
节点 5 -> (3,4,5) 是路径中的最大值。
节点 3 -> (3,1,3) 是路径中的最大值。
输入:root = [3,1,4,3,null,1,5]
输出:4
解释:图中蓝色节点为好节点。
根节点 (3) 永远是个好节点。
节点 4 -> (3,4) 是路径中的最大值。
节点 5 -> (3,4,5) 是路径中的最大值。
节点 3 -> (3,1,3) 是路径中的最大值。
示例2:
输入:root = [3,3,null,4,2]
输出:3
解释:节点 2 -> (3, 3, 2) 不是好节点,因为 "3" 比它大。
输入:root = [3,3,null,4,2]
输出:3
解释:节点 2 -> (3, 3, 2) 不是好节点,因为 "3" 比它大。
二叉树中节点数目范围是 [1, 10^5] 。
每个节点权值的范围是 [-10^4, 10^4] 。
二叉树中节点数目范围是 [1, 10^5] 。
每个节点权值的范围是 [-10^4, 10^4] 。
问题分析
这题让计算二叉树中好节点的个数,所谓好节点就是从根节点开始到当前节点这条路径上没有比当前节点值大的节点,那么当前节点就是好节点。
我们直接使用dfs对二叉树进行遍历,需要记录从根节点到当前节点这条路径上的最大值。如果当前节点大于等于这个最大值,说明这条路径上没有比当前节点值大的节点,所以当前节点就是好节点,最后累加好节点的个数即可。
JAVA:
publicintgoodNodes(TreeNode root){
returndfs(root, Integer.MIN_VALUE);
}
privateintdfs(TreeNode root, intmaxV){
if(root == null)
return0;
intleft = dfs(root.left, Math.max(root.val, maxV));
intright = dfs(root.right, Math.max(root.val, maxV));
returnleft right (root.val < maxV ? 0: 1);
}
C :
public:
intgoodNodes(TreeNode *root){
returndfs(root, INT_MIN);
}
intdfs(TreeNode *root, intmaxV){
if(root == nullptr)
return0;
intleft = dfs(root->left, max(root->val, maxV));
intright = dfs(root->right, max(root->val, maxV));
returnleft right (root->val < maxV ? 0: 1);
}