我是靠谱客的博主 结实金毛,最近开发中收集的这篇文章主要介绍LeetCode——671. 二叉树中第二小的节点(Second Minimum Node In a Binary Tree)[简单]——分析及代码(Java)一、题目二、分析及代码三、其他,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

LeetCode——671. 二叉树中第二小的节点[Second Minimum Node In a Binary Tree][简单]——分析及代码[Java]

  • 一、题目
  • 二、分析及代码
    • 1. 遍历 + 剪枝
      • (1)思路
      • (2)代码
      • (3)结果
  • 三、其他

一、题目

给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。

更正式地说,root.val = min(root.left.val, root.right.val) 总成立。

给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。

示例 1:

输入:root = [2,2,5,null,null,5,7]
输出:5
解释:最小的值是 2 ,第二小的值是 5 。

示例 2:

输入:root = [2,2,2]
输出:-1
解释:最小的值是 2, 但是不存在第二小的值。

提示:

  • 树中节点数目在范围 [1, 25] 内
  • 1 <= Node.val <= 2^31 - 1
  • 对于树中每个节点 root.val == min(root.left.val, root.right.val)

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/second-minimum-node-in-a-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、分析及代码

1. 遍历 + 剪枝

(1)思路

根据题中二叉树的特点,对任意子树,其根节点一定是子树中最小的节点。因此,对树进行遍历,寻找超过根节点的最小节点值即可。

在此基础上可进一步剪枝,对值较大的子节点,它的子树中的节点值一定不小于当前子节点的值。而本题只要求求解第二大的值,因此只需记录该节点的值,无需对它的子树展开遍历。

(2)代码

class Solution {
long ans = Long.MAX_VALUE;//根据Node.val的范围,将ans设置为不可能到达的大值
public int findSecondMinimumValue(TreeNode root) {
check(root);//遍历各个节点
return (ans == Long.MAX_VALUE) ? -1 : (int)ans;//判断是否第二小的值并返回

}
public void check(TreeNode node) {
if (node.left == null)//叶子节点,跳过
return;
if (node.left.val == node.right.val) {//两个子节点值相同,第二小的值可能存在于任一子树中,都需遍历
check(node.left);
check(node.right);
} else if (node.left.val < node.right.val) {//左子节点值较小
check(node.left);//第二小的值可能存在于左子树中,继续遍历
ans = Math.min(ans, node.right.val);//右子节点的值可能为第二小的值,且右子树中其他节点值都大于该节点,可剪枝
} else {//右子节点值较小,处理过程同上
check(node.right);
ans = Math.min(ans, node.left.val);
}
return;
}
}

(3)结果

执行用时 :0 ms,在所有 Java 提交中击败了 100.00% 的用户;
内存消耗 :35.6 MB,在所有 Java 提交中击败了 77.23% 的用户。

三、其他

暂无。

最后

以上就是结实金毛为你收集整理的LeetCode——671. 二叉树中第二小的节点(Second Minimum Node In a Binary Tree)[简单]——分析及代码(Java)一、题目二、分析及代码三、其他的全部内容,希望文章能够帮你解决LeetCode——671. 二叉树中第二小的节点(Second Minimum Node In a Binary Tree)[简单]——分析及代码(Java)一、题目二、分析及代码三、其他所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(175)

评论列表共有 0 条评论

立即
投稿
返回
顶部