【发布时间】:2014-03-06 02:37:46
【问题描述】:
我正在为大学工作创建一个二叉树算法,我需要开发一种算法来有效地找到所有小于指定值的值(它们需要按顺序排列)。
10
/ \
9 11
/ \
5 15
/ \ / \
1 8 13 19
/ \
12 14
这是我想出的解决方案(上图是你忘记二叉树的样子)。
private BinaryTreeNode root;
public int[] getBeforeJoinedNum(int num){
usersInOrder = new ArrayList<User>();
beforeNum(num, root);
return usersInOrder;
}
private void beforeNum(int num, BinaryTreeNode n){
if (n != null){
beforeNum(num, n.getLeft());
int nodeValue = n.getValue();
if (num<nodeValue){
usersInOrder.add(n.getValue());
beforeNum(num, n.getRight());
}
}
}
这个算法的问题在于它会进行不必要的比较。例如,如果我想要所有小于 10 的数字,代码将检查 9 剩下的所有数字(即 1、5、8)是否小于 10,而应该很明显任何小于 9 的数字当然应该是在列表中,无需任何比较。
如何让这个算法更高效?不幸的是,我不能使用 Java 集合框架,因为数据结构是课程的重点。
【问题讨论】:
-
BinaryTreeNode与UserNode有何关系? -
只需创建一个获取任何给定父级的每个子级的方法。然后做一个比较。 if(num
-
root似乎没有被初始化为任何东西,这意味着if(n != null)永远不会是真的。 -
@NiklasB。对不起,我编辑了我的帖子
-
@alliteralmind 它是初始化的,我只是没有在我添加所有数据的地方添加长代码
标签: java algorithm binary-tree computer-science binary-search-tree