我应该从二叉树中搜索给定的相册并将其返回。这就是我到目前为止所拥有的:
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;
}
我知道问题是什么(我认为),但是我被卡住了......在获取所有节点的名称之后,它将它们与名称进行比较,但它为所有节点执行此操作并返回检查最后一个(它始终是二叉树的根)。我该如何解决这个问题?
答案 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
项目可以不止一次出现。因此,您可能需要修改此代码以捕获所有代码的列表。