Java 求解二叉搜索树中的搜索

Posted 南淮北安

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 求解二叉搜索树中的搜索相关的知识,希望对你有一定的参考价值。

一、题目

给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。

在这里插入图片描述

二、题解

该题可以利用二叉搜索树的特性去解决:

若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
它的左、右子树也分别为二叉搜索树

三、递归法

class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
        //递归终止条件
        if (root == null || root.val == val) {
            return root;
        }
        //递归逻辑
        return root.val > val ? searchBST(root.left, val) : searchBST(root.right, val);
    }
}

四、迭代法

常规的迭代法,是利用栈来模拟深度遍历,利用队列来模拟广度遍历

但是对于二叉搜索树,节点有序,所以可以不使用辅助栈或者队列就可以写出跌打法

一般二叉树,递归中包含着回溯的思想,比如一个左方向的分支走到头,需要掉头,走右分支

但是对于二叉搜索树,不需要回溯的过程,因为节点的有序性帮我们确定了搜索方向

class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
        while (root != null && root.val != val) {
            if (root.val > val) {
                root = root.left;
            } else {
                root = root.right;
            }
        }
        return root;
    }
}

五、总结

二叉搜索树的特性:

若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
它的左、右子树也分别为二叉搜索树

以上是关于Java 求解二叉搜索树中的搜索的主要内容,如果未能解决你的问题,请参考以下文章

Java 求解二叉搜索树中的搜索

Java 求解二叉搜索树中的众数

数据结构与算法之深入解析“二叉搜索树中的插入操作”的求解思路与算法示例

Java 求解修剪二叉搜索树

数据结构与算法之深入解析“删除二叉搜索树中的节点”的求解思路与算法示例

数据结构与算法之深入解析“二叉搜索树中的搜索”的求解思路与算法示例