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