Java 我的MenuItem助手递归不是';t工作不正常
我尝试使用二叉搜索树(BST)从MenuItem类中查找对象,在该类中可以找到菜肴的名称。然而,出了点问题,我不知道出了什么问题 我的目标: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
- MenuItem搜索(字符串名称)–遍历树并返回对MenuItem的引用,该MenuItem的搜索键(名称)与参数匹配。如果未找到,则返回null
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());
}
}
}