在二进制树中搜索字符串

时间:2012-11-21 21:06:36

标签: java

我希望搜索二叉树以查找存储在节点中的字符串。

public void traverse (BinaryTreeNode root){ 
    if (root.leftchild != null){
        traverse (root.leftchild);
    }
        System.out.println(root.character);
    if (root.rightchild != null){
        traverse (root.rightchild);
    }
}

这完全正常,并显示树中的所有节点。 (代码是从另一个旧的stackoverflow问题的代码开始的!我的问题是如何比较root.character与输入的字符串,如果它匹配的是递归递归。如果有人可以删除一些提示,我会很感激。

    public BinaryTreeNode traverse (BinaryTreeNode root, String inString){ // Each child of a tree is a root of its subtree.
    if (root.character != null) {
        if (root.character.equalsIgnoreCase(inString)) {
            System.out.println("root.charcter: " + root.character + " char " + inString);
            return root;
        }
    }
    if (root.leftchild != null){
        traverse (root.leftchild, inString);
    }

    if (root.rightchild != null){
        traverse (root.rightchild, inString);
    }

    return null;
}

上面的代码似乎工作,它返回正确的BinaryTreeNode但是,我没有找到如何在找到节点后停止递归,因此它在结束时返回null。

1 个答案:

答案 0 :(得分:1)

您正在调用遍历函数而不将字符串传递给搜索...在很多情况下您也缺少返回值。

你需要多思考一下你的函数应该何时终止递归(在这种情况下,返回节点)以及函数在不终止但探索树的其余部分时应该做什么。

e.g。在伪代码中(你做编程):

findNode(root, query) {
  // nothing to search, not found
  if root==null return null  

  // Found it!
  if root.name==query return root

  // This is when we recurse left, stop if we found a result
  leftResult = findNode(root.left, query)
  if leftResult!=null return leftResult

  // else try to the right, stop if we found a result
  rightResult = findNode(root.right, query)
  if rightResult!=null return rightResult

  // Nothing else to try, not found
  return null
}