我试图在二进制搜索树中实现这个方法,它应该告诉我找到的元素的深度。
我的问题是,如果找不到元素,我的搜索应该如何返回它退出(或被放置)的树的级别。
即。如果树中不存在该节点,则应返回应插入树的级别。我不想回归" 0"如果在树中找不到该元素,而是应该放置它的级别。
这是我到目前为止的代码,但它一直返回1.
public int depthSearch(Node root, int key){
int depthLevel = 0;
if (root==null || root.data==key){
depthLevel++;
return depthLevel;
}
if (root.data > key){
depthSearch(root.left, key);
depthLevel++;
return depthLevel;
}else{
depthSearch(root.right, key);
depthLevel++;
return depthLevel;
}
}
我的第二个问题是将深度级别计数器逻辑添加到我的find方法中是否有意义?
这是方法:
public boolean find(int id){
Node current = root;
while(current!=null){
if(current.data==id){
return true;
}else if(current.data>id){
current = current.left;
}else{
current = current.right;
}
}
return false;
}
提前感谢您查看我的代码。我无法在SO上找到类似问题的主题。
答案 0 :(得分:4)
我的第二个问题是添加深度级别是否有意义 我找到方法的反逻辑?
不,如果找到此方法,则返回true
,否则返回false
。你不能在Java中返回多个值(你可以创建一个既能容纳这两个值的对象又可以......呃......)。但即使你可以 - 一种方法应该做一件事!
对于depthSearch
,实施存在问题:
你没有return
递归调用的结果。
虽然可以轻松修复:
public int depthSearch(Node root, int key) {
if (root == null || root.data == key) {
return 1;
}
else if (root.data > key) {
return 1 + depthSearch(root.left, key);
} else {
return 1 + depthSearch(root.right, key);
}
}