我有一个TreeNode类,如下所示:

class TreeNode {
    int value;
    TreeNode left;
    TreeNode right;

public TreeNode(int x) {
    value = x;
}

我想编写一个递归方法contains(int I),如果I是树中某个节点的值,则返回true,否则返回false。
根据我的理解,二叉树不需要排序,所以我不应该将当前节点的值与我们正在搜索的值进行比较。因此我写了以下方法:
public boolean contains(int i) {
    if (value == x) {
        return true;
    } else {
        if (left != null) {
            return left.find(i);
        }
        if (right != null) {
            return right.find(i);
        }
    }
    return false;
}

我的想法是,它会检查当前节点的值是否等于我们正在搜索的值,如果不等于,那么它应该递归地调用带有左右节点的方法(如果它们不为空),否则方法将返回false。
如果我们搜索的值与树左侧的节点相对应,则此方法最终返回true,但是一旦我们搜索的值超出此值(向右),它将返回false我已经花了好几个小时来思考这个问题,我确信有一个相对来说微不足道的解决方案,但我似乎没办法做到。

最佳答案

像这样的:

public boolean contains(int i) {
    return value == i ||
       left != null && left.contains(i) ||
       right != null && right.contains(i);
}

关于algorithm - 查找二进制树中是否包含值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55101729/

10-12 21:22