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

时间:2015-03-07 15:53:55

标签: java tree

如何在未排序的树中查找小于N的数字。我在接受采访时被问到了这个问题。我的回答是我应该检查从根开始的所有节点,否则我将首先订购树。还有其他想法吗?

1 个答案:

答案 0 :(得分:1)

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

假设您不允许修改树(大多数问题,例如您不喜欢修改结构),您肯定会查看O(n)解决方案。然而,问题就变成了实施解决方案的最佳方式。因为它是一棵树,答案(以及面试官正在寻找的东西)几乎肯定是递归

如果我们有一个类似于此的类(我假设树的一般情况。如果它是二叉树,只需用左和右替换孩子):

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

然后我们可以在类中添加一个小于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;
    }
}  

如果您的目标是汇总数字,而不是计算数字,那么试试这个:

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;
    }
}