我目前正在编写二进制搜索树,目前正在尝试实现一个递归函数,该函数确定二叉树中是否存在节点。
这是节点类:
HBRUSH CXxxDlg::OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor ) {
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
pDC->SetTextColor(RGB(0,0,0));
pDC->SetBkColor(RGB(192,192,192)); // …(1)
HBRUSH hbrOrg = static_cast<HBRUSH>(GetStockObject(GRAY_BRUSH)); // …(2)
return hbrOrg;
}
有问题的功能是Exists功能。这在BST的根节点上调用,如:public class BSTNode
{
public String data; // use this for data and key
public BSTNode parent, leftchild, rightchild;
public BSTNode(String key)
{
this.data = key;
}
public Boolean Exists(String search)
{
if(data.equals(search))
return true;
else
{
if (search.compareToIgnoreCase(data) < 0 && leftchild != null)
{
leftchild.Exists(search);
}
else if (search.compareToIgnoreCase(data) > 0 && rightchild != null)
{
rightchild.Exists(search);
}
}
return false;
}
public void Insert(String key)
{
if(key.compareToIgnoreCase(data) < 0)
{
if(leftchild == null)
leftchild = new BSTNode(key);
else
leftchild.Insert(key);
}
else
{
if(rightchild == null)
rightchild = new BSTNode(key);
else
rightchild.Insert(key);
}
}
}
当最终满足节点时,Exists函数的基本情况正确执行,但是当撤消返回堆栈时执行root.Exists("Value");
语句。我似乎无法更改函数以删除return false;
语句。
答案 0 :(得分:4)
您忘记使用递归调用返回的值:
public Boolean Exists(String search)
{
if(data.equals(search))
return true;
else
{
if (search.compareToIgnoreCase(data) < 0 && leftchild != null)
{
return leftchild.Exists(search);
}
else if (search.compareToIgnoreCase(data) > 0 && rightchild != null)
{
return rightchild.Exists(search);
}
}
return false;
}