二叉搜索树(构建&&检索)

二叉搜索树(构建&&检索)

1 二叉搜索树的构建

1.1 题目描述

给定一个数组,该数组中存在n个元素,将该数组中的元素按照顺序插入二叉树中,能够构造一棵二叉树,该二叉树中序遍历是顺序递增的。

1.2 解题思路

给定一棵已经存在的树,初始时树为null,按照二叉树中的顺序向该二叉树中插入元素,直到所有节点都插入root树中,返回root。

  • 如何插入?
    • 终止条件:如果当前root为空,直接new TreeNode,将val赋值,然后左右子树为空。
    • 单层函数逻辑:如果val > root.value,将root的右子树设置为对右子树进行插入操作后的树,否则将root的左子树设置为对左子树进行插入后的树。
    • 参数及返回值:
      • 参数:当前访问节点,当前插入值
      • 返回值:处理后的树的根节点

1.3 代码实现

/**
 * @author zdh
 * @create 2021-07-28 12:04
 */
public class CreateBST {
    public TreeNode createBST(TreeNode root, int val){
        if(root == null){//终止条件,当访问到null,该出就是节点插入位置
            return  new TreeNode(val, null, null);
        }
        if(root.val > val){//如果root的节点值大于参数val
            root.left = createBST(root.left, val);
        }else {//root的节点值小于val,将节点插入root的右子树
            root.right = createBST(root.right, val);
        }
        return root;//返回节点处理过后的树
    }

    public static void main(String[] args) {
        TreeNode root = null;
        int[] BSTArray = new int[]{1, 2, 3, 9, 8};
        for (int i = 0; i < BSTArray.length; i++) {//逐个调用插入函数插入数组中的每个元素
            root = new CreateBST().createBST(root, BSTArray[i]);
        }
    }
}


2 二叉搜索树的搜索

2.1 题目描述

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

例如,

给定二叉搜索树:

    4
   / \
  2   7
 / \
1   3

和值: 2

返回如下子树:

      2     
     / \   
    1   3

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-in-a-binary-search-tree

2.2 解题思路

  • 使用递归方法查询
    • 终止条件:**1.**当当前节点为null,直接返回空,表示该树中不存在待查询元素。**2.**当前节点值等于val值,表明该节点就是要查找的节点,直接返回root。
    • 单层函数逻辑:如果当前节点的值大于val,在左子树中继续查找,并将查找到的值返回。如果当前节点值小于val,在右子树中继续查找,并将查找到的值返回。
    • 参数及返回值:
      • 参数:当前访问节点root和要检索值
      • 返回值:查询到的二叉树根节点

2.3 实现代码

/**
 * @author zdh
 * @create 2021-07-28 11:44
 * LeetCode 700 在二叉搜索树中搜索特定节点
 */
public class SearchInBST {
    public TreeNode searchBST(TreeNode root, int val) {
        if(root == null)//当节点为空,返回null,表示二叉树中不存在检索的元素
            return null;
        if(val == root.val)
            return root;//当前root值等于检索val,表明该树就是要找的子树
        if(root.val > val){
            return searchBST(root.left, val);//当前节点的值大于val,在左子树中继续查找,并将查找到的值返回
        }else {
            return searchBST(root.right, val);
        }//如果当前节点值小于val,在右子树中继续查找,并将查找到的值返回。
    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值