Java中递归查找二叉树中的最小值

Java中递归查找二叉树中的最小值,java,recursion,tree,Java,Recursion,Tree,我需要在不是二叉搜索树的字符串树中递归地找到最小值。我试着看其他一些问题,比如我的问题,但我想不出答案 我发现我必须找到每个子树的最小值,然后将其与根进行比较,然后返回最小值。但我不知道该怎么写 这是标题: public static Object min(TreeNode t){ } 编辑: 到目前为止我发现的是 public static Object min(TreeNode t){ if(t == null){ return ______; }

我需要在不是二叉搜索树的字符串树中递归地找到最小值。我试着看其他一些问题,比如我的问题,但我想不出答案

我发现我必须找到每个子树的最小值,然后将其与根进行比较,然后返回最小值。但我不知道该怎么写

这是标题:

public static Object min(TreeNode t){

}
编辑: 到目前为止我发现的是

public static Object min(TreeNode t){
    if(t == null){
        return ______;
    }
    else if(min(t.getLeft().compareTo(min(t.getRight()) < 0){
        if(min(t.getLeft()).compareTo(t) < 0){
            return min(t.getLeft());
        }
    }
    else if(min(t.getLeft().compareTo(min(t.getRight()) > 0){
        if(min(t.getRight()).compareTo(t) < 0){
            return min(t.geRight());
        }
    }
    else{
        return t;
    }
}
公共静态对象最小值(TreeNode t){
如果(t==null){
返回;
}
else if(min(t.getLeft().compareTo)(min(t.getRight())<0){
if(min(t.getLeft()).compareTo(t)<0){
返回最小值(t.getLeft());
}
}
else if(min(t.getLeft().compareTo)(min(t.getRight())>0){
if(min(t.getRight())。与(t)<0比较{
返回最小值(t.geRight());
}
}
否则{
返回t;
}
}

我想我走的方向是正确的,但我不确定返回语句在空基情况下适合什么。有人能帮我理解返回语句中应该包含什么以及为什么吗?如果我做得对的话?谢谢你需要处理
getLeft
getRight
也为空,否则你的代码会以e结尾例外情况

那么,如果你想要“最小值”,我认为不应该输入任何大于比较的情况

谁说你不能返回空值

public static Object min(TreeNode t){
    TreeNode min = t;
    if(t == null){
        return min;
    }
    final TreeNode left = t.getLeft();
    final TreeNode right = t.getRight();

    if (left == null && right == null) 
        return min;

    if(left != null && left.compareTo(t) <= 0) {
        min = (TreeNode) min(left);
    if(min != null && right != null && right.compareTo(t) > 0){ // not sure about this 
        min = (TreeNode) min(right);
    }
    return min;
}
公共静态对象最小值(TreeNode t){
TreeNode最小值=t;
如果(t==null){
返回最小值;
}
最终树节点左=t.getLeft();
最终树节点右=t.getRight();
if(left==null&&right==null)
返回最小值;
如果(left!=null&&left.compareTo(t)0){//对此不确定
最小值=(树节点)最小值(右);
}
返回最小值;
}

欢迎使用Stack Overflow!我们是一个问答网站,不是一个出租编码服务。请解释您迄今为止所做的尝试以及失败的原因。请参阅:@JoeC同意。但是,在这种情况下,您应该投票关闭。@GabrielOshiro正确,但在这种情况下,您应该投票关闭。@nhouser9我很乐意,但我还没有“我有足够的声誉这么做。@GabrielOshiro谢谢你的建议,我做得更好了吗?是的,未经测试;)请随意使用答案旁边的复选标记接受答案。此外,欢迎你使用修复编辑我的答案