在二叉搜索树(递归或循环)中,哪个更好地实现搜索操作?
问问题
487 次
5 回答
2
如果您想搜索,则无需递归。对于这种情况,递归将是一种矫枉过正。只需编写一个循环并在找到时中断或在叶节点处中断(如果未找到)
于 2012-11-20T03:02:12.340 回答
2
我通常发现递归更容易实现,并且至少使用树,使您的代码对其他人更具可读性。但最后这取决于你的树是否平衡
如果你的树是平衡的,那么我认为你肯定可以使用递归,因为你可以保证递归调用不会超过 log(n) (例如,对于 n=100000000,你必须进行的递归调用的最差数量只有 27 左右)
另一方面,如果您的树不平衡,那么我认为循环是您最好的选择,因为您可能必须检查树的所有元素,并且递归将使用大量内存来维护堆栈。
于 2013-02-26T12:17:11.387 回答
0
Assuming you have an entity class BinaryTreeNode, here is the non-recursive implementation of searching a node in Binary Search Tree:
public static BinaryTreeNode searchBstNode(BinaryTreeNode temp, int data){
while(true){
if(temp.getData()==data){
break;
}
if(temp.getData()>data){
if(temp.getLeft()!=null){
temp=temp.getLeft();
}
else{
System.out.println("Data value ="+ data+" not found!");
return null;
}
}
if(temp.getData()<data){
if(temp.getRight()!=null){
temp=temp.getRight();
}
else{
System.out.println("Data value ="+ data+" not found!");
return null;
}
}
}
System.out.println("Data found in the BST");
return temp;
于 2013-11-23T10:11:54.213 回答
0
While(current != null)
作品。
public class BST<E extends Comparable<E>>
extends AbstractTree<E> {
protected TreeNode<E> root;
protected int size = 0;
~ ~ ~ ~
// Returns true if the element is in the tree
public boolean search(E e) {
TreeNode<E> current = root; // Start from the root
while (current != null) {
if (e.compareTo(current.element) < 0) {
current = current.left;
}
else if (e.compareTo(current.element) > 0) {
current = current.right;
}
else // element matches current.element
return true; // Element is found
}
return false;
}
于 2013-04-18T19:54:38.540 回答
0
什么是最好的算法将取决于我们要解决的问题的上下文。这个 wiki 页面显示了这两者之间的良好 com 监狱。希望这会有所帮助。 http://en.wikipedia.org/wiki/Binary_search_algorithm
于 2014-05-13T08:53:08.497 回答