递归搜索二叉树

时间:2015-05-13 05:03:27

标签: java algorithm data-structures graph binary-search-tree

我应该从二叉树中搜索给定的相册并将其返回。这就是我到目前为止所拥有的:

public AlbumNode getAlbum(AlbumNode root, String name) {
    if (root != null) {
        if(root.left != null) getAlbum(root.left, name);
        if(root.right != null) getAlbum(root.right, name);
    }
    if(root.getName().equals(name)) return root;

    return null;
}

我知道问题是什么(我认为),但是我被卡住了......在获取所有节点的名称之后,它将它们与名称进行比较,但它为所有节点执行此操作并返回检查最后一个(它始终是二叉树的根)。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

试试这段代码:

public AlbumNode getAlbum(AlbumNode node, String name) {
    if (node == null) {     // this checks the base case
        return null;        // your original code failed for a null root
    } else {
        if (node.getName().equals(name)) {
            return node;
        } else {
            AlbumNode result = getAlbum(node.left, name);
            if (result != null) {
                return result;
            }
            result = getAlbum(node.right, name);

            return result;  // you need to return the result inside the recursion
        }                   // your original code never returned the recursive calls
    }
}

答案 1 :(得分:2)

代码应捕获结果为:

的节点
public AlbumNode getAlbum(AlbumNode root, String name) {
    AlbumNode result;
    if(root.getName().equals(name)){
      return root;
    }
    if (root != null) {
        if(root.left != null) result = getAlbum(root.left, name);
        if(result != null) {
            return result;
        } 
        if(root.right != null) result = getAlbum(root.right, name);
    }
    return result;
}

如果Binary Tree项目可以不止一次出现。因此,您可能需要修改此代码以捕获所有代码的列表。