【问题标题】:My MenuItem helper recursion isn't working properly我的 MenuItem 帮助程序递归无法正常工作
【发布时间】:2020-11-22 17:58:40
【问题描述】:

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

我的目标:

  • MenuItem search(String name) – 遍历树并返回对带有与参数匹配的搜索键(名称)的 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;
    }

    
}

【问题讨论】:

    标签: java eclipse computer-science


    【解决方案1】:

    在以下函数中,您通过类名(BSTNode)而不是实例名(根)引用。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 2011-11-23
      • 1970-01-01
      • 2020-04-21
      • 2022-01-19
      • 2015-05-06
      • 1970-01-01
      相关资源
      最近更新 更多