783. 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的差值。

注意:

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

思路分析

求解关键:最容易想到的就是得到中序遍历数组,然后得到最小距离。不过我们也可以在中序遍历的时候,就进行比较得到最小距离,这样空间复杂度就可以降至常数级别。

参考解答

参考解答1

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

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

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

public class Solution {

    // 我起初的思路是使用中续遍历,返回最小值

    public int minDiffInBST(TreeNode root) {
        List<Integer> inOrderList = new ArrayList<>();
        inOrder(root, inOrderList);

        int len = inOrderList.size();
        int ret = Integer.MAX_VALUE;
        for (int i = 0; i < len - 1; i++) {
            ret = Math.min(ret, inOrderList.get(i + 1) - inOrderList.get(i));
        }
        return ret;
    }

    private void inOrder(TreeNode node, List<Integer> inOrderList) {
        if (node == null) {
            return;
        }
        inOrder(node.left, inOrderList);
        inOrderList.add(node.val);
        inOrder(node.right, inOrderList);
    }
}

参考解答2

public class Solution2 {

    public int minDiffInBST(TreeNode root) {
        // 设置为 Integer 是为了检测出没有赋值的情况
        Integer[] preVal = new Integer[1];
        int[] ret = new int[]{Integer.MAX_VALUE};
        inOrder(root,preVal,ret);
        return ret[0];
    }

    private void inOrder(TreeNode node, Integer[] preVal, int[] ret) {
        if (node == null) {
            return;
        }
        inOrder(node.left, preVal, ret);
        if (preVal[0] != null) {
            int diff = node.val - preVal[0];
            ret[0] = Math.min(ret[0], diff);
        }
        // 注意,在这个位置更新之前的值
        preVal[0] = node.val;
        inOrder(node.right, preVal, ret);
    }
}

本篇文章的地址为 https://liweiwei1419.github.io/leetcode-solution/leetcode-0783-minimum-distance-between-bst-nodes ,如果我的题解有错误,或者您有更好的解法,欢迎您告诉我 liweiwei1419@gmail.com