递归函数返回错误返回false

时间:2016-02-17 16:18:32

标签: java recursion binary-search-tree

我目前正在编写二进制搜索树,目前正在尝试实现一个递归函数,该函数确定二叉树中是否存在节点。

这是节点类:

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;语句。

1 个答案:

答案 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;
 }