Java 如何在未排序树中查找小于N的数

Java 如何在未排序树中查找小于N的数,java,tree,Java,Tree,如何在未排序的树中查找小于N的数。我在一次采访中被问到这个问题。我的答案是,我应该检查从根开始的所有节点,否则我将首先对树进行排序。还有其他想法吗?如果是未排序的树,则必须根据定义检查每个节点。如果要检查除一个节点外的所有节点,则在不检查最后一个节点的情况下,无法判断是否应将计数增加1 假设不允许修改树(像这样的大多数问题不喜欢修改结构),那么您肯定会看到一个O(n)解决方案。然而,问题就变成了实施解决方案的最佳方式是什么。因为它是一棵树,答案(以及面试官想要的)几乎肯定是递归 如果我们有一个大

如何在未排序的树中查找小于N的数。我在一次采访中被问到这个问题。我的答案是,我应该检查从根开始的所有节点,否则我将首先对树进行排序。还有其他想法吗?

如果是未排序的树,则必须根据定义检查每个节点。如果要检查除一个节点外的所有节点,则在不检查最后一个节点的情况下,无法判断是否应将计数增加1

假设不允许修改树(像这样的大多数问题不喜欢修改结构),那么您肯定会看到一个
O(n)
解决方案。然而,问题就变成了实施解决方案的最佳方式是什么。因为它是一棵树,答案(以及面试官想要的)几乎肯定是递归

如果我们有一个大致如下的类(我假设一棵树的一般情况,如果它是一棵二叉树,就用左和右替换子树):

公共类树节点{
私人国际旅行社;
私人儿童;
}
然后我们可以向类中添加一个小于N的方法,如下所示:

public class TreeNode{
    private int val;
    private Set<TreeNode> children;

    public int lessThanNCount(int n){
        int count = (val < n ? 1 : 0);
        if(children != null){
            for(TreeNode tn : children){
                count += tn.lessThanNCount(n);
            }
        }
        return count;
    }
}  
公共类树节点{
私人国际旅行社;
私人儿童;
公共整数lessThanNCount(整数n){
整数计数=(val
如果您的目标是汇总数字,而不是数一数,请尝试以下方法:

public class TreeNode{
    private int val;
    private Set<TreeNode> children;

    public ArrayList<Integer> lessThanNVals(int n){
        ArrayList<Integer> vals = new ArrayList<Integer>();
        if(val < n) vals.add(val);
        if(children != null){
            for(TreeNode tn : children){
                vals.addAll(tn.lessThanNCount(n));
            }
        }
        return vals;
    }
}  
公共类树节点{
私人国际旅行社;
私人儿童;
公共阵列列表Lessthanvals(int n){
ArrayList VAL=新的ArrayList();
如果(val
public class TreeNode{
    private int val;
    private Set<TreeNode> children;

    public ArrayList<Integer> lessThanNVals(int n){
        ArrayList<Integer> vals = new ArrayList<Integer>();
        if(val < n) vals.add(val);
        if(children != null){
            for(TreeNode tn : children){
                vals.addAll(tn.lessThanNCount(n));
            }
        }
        return vals;
    }
}