Java 我的MenuItem助手递归不是';t工作不正常

Java 我的MenuItem助手递归不是';t工作不正常,java,eclipse,computer-science,Java,Eclipse,Computer Science,我尝试使用二叉搜索树(BST)从MenuItem类中查找对象,在该类中可以找到菜肴的名称。然而,出了点问题,我不知道出了什么问题 我的目标: MenuItem搜索(字符串名称)–遍历树并返回对MenuItem的引用,该MenuItem的搜索键(名称)与参数匹配。如果未找到,则返回null 这是我的BST课程: public class BST { private BSTNode root; public BST() { roo

我尝试使用二叉搜索树(BST)从MenuItem类中查找对象,在该类中可以找到菜肴的名称。然而,出了点问题,我不知道出了什么问题

我的目标:

  • MenuItem搜索(字符串名称)–遍历树并返回对MenuItem的引用,该MenuItem的搜索键(名称)与参数匹配。如果未找到,则返回null
这是我的BST课程:

public class BST {
    
    private BSTNode root;
    
    
    public BST() {  
        root = null;
    }
    
    
    public void insert(MenuItem mi) {
        if (root == null)
            root = new BSTNode(mi, null, null);
        else
            insert(root, mi); 
    }
    
     private void insert(BSTNode cur, MenuItem mi) {
            if (mi.compareTo(cur.getData()) < 0)
                if (cur.getLeft() != null)
                    insert(cur.getLeft(), mi);
                else
                    cur.setLeft(new BSTNode(mi, null, null));
            else if (mi.compareTo(cur.getData()) > 0)
                if (cur.getRight() != null)
                    insert(cur.getRight(), mi);
                else
                    cur.setRight(new BSTNode(mi, null, null));
            else
                //If item is same then just add quantity in existing node
                cur.getData().setQuantity(cur.getData().getQuantity() + mi.getQuantity()); 
        }

    
    
    public void preorder() {
        printPreOrder(root);
        
    }
    
    private void printPreOrder(BSTNode root) {
        if(root != null) {
        System.out.print(root.getData());
        printPreOrder(root.getLeft());
        printPreOrder(root.getRight());
        }
    }

    public void postorder() {
        printPost(root);
    }
    
    private void printPost(BSTNode root) {
        if(root != null) {
            printPost(root.getLeft());
            printPost(root.getRight());
            System.out.println(root.getData());
        }
    }
    
    public void inorder() {
        printInorder(root);
    }
    
    private void printInorder(BSTNode root) {
        if(root != null) {
            printInorder(root.getLeft());
            System.out.println(root.getData());
            printInorder(root.getRight());
            }
        }
    
    public int size(){
        return size(root);
    }

    private int size(BSTNode cur){
        if (cur==null)
            return 0;
        return 1 + size(cur.getLeft()) + size(cur.getRight());
    }
    
    public int depth(BSTNode root) {
        if (root == null)
            return 0;
        else {
            
            int leftDepth = depth(root.getLeft()); 
            int rightDepth = depth(root.getRight()); 

            if (leftDepth > rightDepth) 
             return (leftDepth + 1); 
            else 
              return (rightDepth + 1); 
        }
    }
    
    public MenuItem search(String name) {
        if(root == null)
            return null;
        else
            return search(name,root);   
        
    }
    
    private MenuItem search(String name, BSTNode root) {
        if(name == root.getData()) {
            return root;
        }
         if ( name.compareTo(BSTNode.getData()) < 0 ){
                if(BSTNode.getLeft() == null){
                    System.out.println("Item not found.");
                    return null;
                }else{
                    return search(name, BSTNode.getLeft());
                }
            }else{
                if (BSTNode.getRight() == null ){
                    System.out.println("Item not found.");
                    return null;
                }else{
                    return search(name, BSTNode.getRight());
                }
            }
        
    }
    
    
    public double getTotalBeforeTax() {
         return 0;
    }
    
    public double getTax(double taxrate) {
        return getTotalBeforeTax()*taxrate;
        
    }
    
    public double getTip(double tipPercent){
        return getTotalBeforeTax()*tipPercent;
    }

    public String toString() {
        return null;
    }

    
}
公共类BST{
私有节点根;
公共BST(){
root=null;
}
公共无效插入(菜单项mi){
if(root==null)
root=新节点(mi,null,null);
其他的
插入(根,mi);
}
专用无效插入(BSTNode cur,MenuItem mi){
if(mi.compareTo(cur.getData())<0)
if(cur.getLeft()!=null)
插入(cur.getLeft(),mi);
其他的
cur.setLeft(新的BSTNode(mi,null,null));
else if(mi.compareTo(cur.getData())>0)
if(cur.getRight()!=null)
插入(cur.getRight(),mi);
其他的
cur.setRight(新的BSTNode(mi,null,null));
其他的
//如果项目相同,则只需在现有节点中添加数量
cur.getData().setQuantity(cur.getData().getQuantity()+mi.getQuantity());
}
公共无效预订单(){
打印预订单(根);
}
私有void打印预订单(BSTNode根){
if(root!=null){
System.out.print(root.getData());
printPreOrder(root.getLeft());
printPreOrder(root.getRight());
}
}
公众邮购无效(){
printPost(root);
}
私有void printPost(节点根){
if(root!=null){
printPost(root.getLeft());
printPost(root.getRight());
System.out.println(root.getData());
}
}
公共无效序(){
打印顺序(根);
}
私有void printInorder(节点根){
if(root!=null){
printInorder(root.getLeft());
System.out.println(root.getData());
printInorder(root.getRight());
}
}
公共整数大小(){
返回大小(根);
}
专用整数大小(BSTNode cur){
如果(cur==null)
返回0;
返回1+size(cur.getLeft())+size(cur.getRight());
}
公共整数深度(节点根){
if(root==null)
返回0;
否则{
int leftDepth=depth(root.getLeft());
int rightDepth=深度(root.getRight());
如果(leftDepth>rightDepth)
返回(leftDepth+1);
其他的
返回(rightDepth+1);
}
}
公共菜单项搜索(字符串名称){
if(root==null)
返回null;
其他的
返回搜索(名称、根);
}
私有菜单项搜索(字符串名称,节点根){
if(name==root.getData()){
返回根;
}
if(name.compareTo(BSTNode.getData())<0){
if(BSTNode.getLeft()==null){
System.out.println(“未找到项”);
返回null;
}否则{
返回搜索(名称,BSTNode.getLeft());
}
}否则{
if(BSTNode.getRight()==null){
System.out.println(“未找到项”);
返回null;
}否则{
返回搜索(名称,BSTNode.getRight());
}
}
}
公共双getTotalBefortax(){
返回0;
}
公共双重征税(双重税率){
返回getTotalBeforeTax()*taxrate;
}
公共双GETIP(双tipPercent){
返回getTotalBeforeTax()*tipPercent;
}
公共字符串toString(){
返回null;
}
}

在下面的函数中,您通过类名(BSTNode)而不是实例名(root)引用

私有菜单项搜索(字符串名称,节点根){
if(name==root.getData()){
返回根;
}
if(name.compareTo(root.getData())<0){
if(root.getLeft()==null){
System.out.println(“未找到项”);
返回null;
}否则{
返回搜索(名称,root.getLeft());
}
}否则{
if(root.getRight()==null){
System.out.println(“未找到项”);
返回null;
}否则{
返回搜索(名称,root.getRight());
}
}
}
private MenuItem search(String name, BSTNode root) {
    if (name == root.getData()) {
        return root;
    }
    if (name.compareTo(root.getData()) < 0) {
        if (root.getLeft() == null) {
            System.out.println("Item not found.");
            return null;
        } else {
            return search(name, root.getLeft());
        }
    } else {
        if (root.getRight() == null) {
            System.out.println("Item not found.");
            return null;
        } else {
            return search(name, root.getRight());
        }
    }
}