16.力扣-树-二叉搜索树+中序遍历

力扣-树-二叉搜索树+中序遍历

  • 前提知识点:
    二叉搜索树的性质:设x是二叉搜索树中的一个结点。如果y是x左子树中的一个结点,那么会有y.key<=x.key;如果y是x右子树中的一个节点,那么有y.key>=x.key
    重要关键点:二叉搜索树中序遍历得到的值序列是递增有序的
    1.二叉搜索树中的搜索(LeetCode 700)
  • 题目概述:给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。
  • 题目案例:
    在这里插入图片描述
  • 解题思路:因为二叉搜索树的特殊性,所以可以根据结点的val值判断左子树还是右子树,从而进行遍历
  • java代码递归
class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
        if (root == null || val == root.val) return root;

        return val < root.val ? searchBST(root.left, val) : searchBST(root.right, val);
    }
}
  • java代码迭代
class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
        while (root != null && val != root.val)
            root = val < root.val ? root.left : root.right;
        return root;
    }
}

2.二叉搜索树的最小绝对差(LeetCode 530)

  • 题目概述:给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。
  • 题目案例:
    在这里插入图片描述
  • 解题思路:这道题最重要的就是清楚二叉搜索树中序遍历是递增的,所以只需要与它遍历的上一个结点做差然后取最小值即可,结合递归去做。
  • java代码
class Solution {
    //不要总想着min作为参数传给函数,要想起全局变量啊
    int min;
    int pre;//遍历时用来记录遍历顺序中结点的上一个节点
    public int getMinimumDifference(TreeNode root) {
        min=Integer.MAX_VALUE;
        pre=-1;
        DFS(root);
        return min;
    }
    public void DFS(TreeNode root){
        if(root==null) return ;
        DFS(root.left);
        if(pre==-1) pre=root.val;
        else{
            min=Math.min(min,root.val-pre);
            pre=root.val;
        }
        DFS(root.right);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值