二叉搜索树的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);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 上一篇文章讲述了树的概念, 特征以及分类, 旨在让我们理解什么是树, 树的一些常用的概念是什么,树的分类有哪些等。...
    DevCW阅读 2,084评论 4 10
  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,509评论 1 31
  • 实现ajax的工具 ajax有很多工具,比如浏览器自带的fetch,或者vue以前推荐的vue-resource。...
    八宝君阅读 1,000评论 0 4
  • 一场邂逅,我,爱上了你。你知道吗?我有多喜欢你。 但是,又能怎么样呢?你看不见我,咱们注定是两个世界的人。你在你的...
    慕狱阅读 920评论 0 0
  • Java API Object类 Class类 System类 封装类 Integer类 Character类 S...
    何惧l阅读 126评论 0 0