方法一:用一个set存储遍历二叉树的值,很常规的方法。
方法二:用递归。一开始屡不清关系,总感觉这个函数的返回值是第二小的值呀,怪怪的,这可怎么返回,我再过程中调用的时候是需要它返回子树中最小的呀。其实设定递归的条件就可以,如果当前子节点的值与父节点的值相等那么就递归下去,返回的虽然是子树的第二小的值,但也是对应的想要的子树的最小值。
class Solution {
public int findSecondMinimumValue(TreeNode root) {
if(root==null) return -1;
if(root.left==null && root.right==null) return -1;
int left = root.left.val;
int right = root.right.val;
if(root.val == left){
left = findSecondMinimumValue(root.left);
}
if(root.val == right){
right = findSecondMinimumValue(root.right);
}
if(left==-1 && right==-1){
return -1;
}else if(left!=-1){
return left;
}else{
return right;
}
}
}
来源:CSDN
作者:爱打篮球的憨憨
链接:https://blog.csdn.net/xiaobailaji/article/details/104747869