LeetCode 783. 二叉搜索树结点最小距离(Minimum Distance Between BST Nodes)

783. 二叉搜索树结点最小距离

LeetCode783. Minimum Distance Between BST Nodes

题目描述
给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值。

示例:

输入: root = [4,2,6,1,3,null,null]
输出: 1
解释:
注意: root 是树结点对象 (TreeNode object),而不是数组。

给定的树 [4,2,6,1,3,null,null] 可表示为下图:

          4
        /         2      6
     / \
    1   3  

最小的差值是 1, 它是节点 1 和节点 2 的差值, 也是节点 3 和节点 2 的差值。

注意:

  • 二叉树的大小范围在 2 到 100。
  • 二叉树总是有效的,每个节点的值都是整数,且不重复。

Java 实现

import java.util.ArrayList;
import java.util.List;

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int x) {
        val = x;
    }
}

public class Solution {
    // 中等效率
    private List<Integer> res = new ArrayList<>();

    public int minDiffInBST(TreeNode root) {
        if (root == null) {
            return 0;
        }
        handle(root);
        // Java 8 排序(由于题目是二叉排序树,中序遍历一棵二叉排序树的结点就可得到排好序的结点序列。)
        // res = res.stream().sorted(Integer::compareTo).collect(Collectors.toList());
        int min = Integer.MAX_VALUE;
        for (int i = 1; i < res.size(); i++) {
            min = Math.min(res.get(i) - res.get(i - 1), min);
        }
        return min;
    }

    // 二叉树中序遍历
    public void handle(TreeNode root) {
        if (root == null) {
            return;
        }
        handle(root.left);
        res.add(root.val);
        handle(root.right);
    }
}

参考资料

原文地址:https://www.cnblogs.com/hglibin/p/10817261.html

时间: 2024-10-08 15:43:55

LeetCode 783. 二叉搜索树结点最小距离(Minimum Distance Between BST Nodes)的相关文章

783. 二叉搜索树结点最小距离

给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值. 示例: 输入: root = [4,2,6,1,3,null,null] 输出: 1 解释: 注意,root是树结点对象(TreeNode object),而不是数组. 给定的树 [4,2,6,1,3,null,null] 可表示为下图: 4 / 2 6 / \ 1 3 最小的差值是 1, 它是节点1和节点2的差值, 也是节点3和节点2的差值. 注意: 二叉树的大小范围在 2 到 100. 二叉树总是有效的,每个节点的值都

leetcode 235 二叉搜索树最近公共祖先

leetcode 235 二叉搜索树最近公共祖先 题目描述: 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先.百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p.q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先). 解法一:自己的写法,贼傻 # Definition for a binary tree node. # class TreeNode(object): # def __init__(self

LeetCode 235. 二叉搜索树的最近公共祖先(Lowest Common Ancestor of a Binary Search Tree) 32

235. 二叉搜索树的最近公共祖先 235. Lowest Common Ancestor of a Binary Search Tree 题目描述 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p.q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)." 例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,nul

LeetCode 把二叉搜索树转换为累加树(538)

第538题 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和. 例如: 输入: 二叉搜索树: 5 / 2 13 输出: 转换为累加树: 18 / 20 13 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/convert-bst-to-greater-tree 概念 二叉搜索树 二叉查找树(Binary Search Tree

Leetcode 验证二叉搜索树

给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身必须也是二叉搜索树. 示例 1: 输入: 2 / 1 3 输出: true 示例 2: 输入: 5 / 1 4 / 3 6 输出: false 解释: 输入为: [5,1,4,null,null,3,6].   根节点的值为 5 ,但是其右子节点值为 4 . 这道题我想的解答方案是错误的,后来参考了别人的 # De

Leetcode 235.二叉搜索树的公共祖先

二叉搜索树的公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p.q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)." 例如,给定如下二叉搜索树:  root = [6,2,8,0,4,7,9,null,null,3,5] 示例 1: 输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q

leetcode 235. 二叉搜索树的最近公共祖先(c++)

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p.q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先).” 例如,给定如下二叉搜索树:  root = [6,2,8,0,4,7,9,null,null,3,5] 示例 1: 输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出: 6 解释: 节点

【模板】二叉搜索树(二叉排序树,二叉查找树,BST)

二叉搜索树其实就是满足左结点小于根,右结点大于根这类规则的树形结构. 1 int n; 2 int a[MAX_N]; 3 int lt[MAX_N], rt[MAX_N]; 4 // 没有则为-1 5 // 默认a[0]为根结点 6 7 void Insert(int x, int obj) // 插入结点a[obj] 8 { 9 if(a[obj] < a[x]) 10 { 11 if(lt[x] ^ -1) Insert(lt[x], obj); 12 else lt[x] = obj;

【算法导论学习-24】二叉树专题2:二叉搜索树(Binary Search Tree,BST)

一.   二叉搜索树(Binary SearchTree,BST) 对应<算法导论>第12章.相比一般二叉树,BST满足唯一的条件:任意节点的key>左孩子的key,同时<右孩子的key. 1.     节点类: public class BinarySearchTreesNode<T> { private int key; private T satelliteData; private BinarySearchTreesNode<T> parent, l