2025年--Lc175--H671.二叉树中第二小的节点(遍历二叉树)--Java版
1.题目
2.思路
使用dfs方法对二叉树进行遍历。
假设当前遍历到的节点为 node,如果 node 的值严格大于 rootvalue,那么我们就可以用 node 的值来更新答案 ans。
当我们遍历完整棵二叉树后,即可返回 ans。
rootvalue:根结点的值,也是全树的最小值。
ans:当前找到的“第二小”的候选答案。初始化为 -1 表示“还没找到”。
剪枝:如果已经找到候选 ans,而当前结点值都 ≥ ans,
由于本题的树满足“孩子值 ≥ 父值”,那么这个结点的整棵子树的值都不会比 ans 更小,继续往下找也不可能得到更优的“第二小”,所以可以整棵子树直接跳过。
3.代码实现
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {int ans;int rootvalue;public int findSecondMinimumValue(TreeNode root) {ans=-1;rootvalue=root.val;dfs(root);return ans; }public void dfs(TreeNode node){if(node==null){return;}if(ans!=-1&&node.val>=ans){return;}if(node.val>rootvalue){ans=node.val;}dfs(node.left);dfs(node.right);}
}