二叉搜索树的search

二叉搜索树的搜索分为单个元素的搜索和范围搜索。

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

单个元素的搜索:

递归版本:

TreeNode search(TreeNode root, final int key) {
    if (root == null) {
        return null;
    }
    if (key < root.value) {
        return search(root.left, key);
    } else if (key > root.value) {
        return search(root.right, key);
    } else {
        return root;
    }
}

递推版本:

TreeNode search(TreeNode root, final int key) {
    while (root != null) {
        if (key < root.value) {
            root = root.left;
        } else if (key > root.value) {
            root = root.right;
        } else {
            return root;
        }
    }
    return null;
}

范围搜索:请查找区间[p ,q ]之间的全部数据。

如果把搜索二叉树做中序遍历,那么得到的结果是所有节点都是顺序排列的。只要选择在区间之内的即可。

void search(TreeNode root, final int p, final int q) {
    if (root == null) {
        return;
    }

    search(root.left, p, q);

    if (root.value >= p && root.value <= q) {
        System.out.println(root.value);
    }

    search(root.right, p, q);
}

2020-02-24
按区间搜索的代码,虽然是顺序打印,但是没有利用二叉搜索树的特性,这跟普通二叉树的中序遍历没有什么区别。

void search(BinaryTreeNode root, final int p, final int q) {
    if (root == null) {
        return;
    }
    if (root.value >= p) {
        search(root.left, p, q);
    }
    if (root.value >= p && root.value <= q) {
        System.out.println(root.value);
    }
    if (root.value <= q) {
        search(root.right, p, q);
    }
}

你可能感兴趣的:(二叉搜索树的search)