• 783. Minimum Distance Between BST Nodes


    Given a Binary Search Tree (BST) with the root node root, return the minimum difference between the values of any two different nodes in the tree.

    Example :

    Input: root = [4,2,6,1,3,null,null]
    Output: 1
    Explanation:
    Note that root is a TreeNode object, not an array.
    
    The given tree [4,2,6,1,3,null,null] is represented by the following diagram:
    
              4
            /   
          2      6
         /     
        1   3  
    
    while the minimum difference in this tree is 1, it occurs between node 1 and node 2, also between node 3 and node 2.
    

    Note:

    1. The size of the BST will be between 2 and 100.
    2. The BST is always valid, each node's value is an integer, and each node's value is different.

    M1: inorder traversal (recursive)

    time: O(n), space: O(h)

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        int prev = Integer.MAX_VALUE, minDist = Integer.MAX_VALUE;
        
        public int minDiffInBST(TreeNode root) {
            if(root == null) {
                return 0;
            }
            helper(root);
            return minDist;
        }
        
        public void helper(TreeNode node) {
            if(node == null) {
                return;
            }
            helper(node.left);
            if(prev != Integer.MAX_VALUE) {
                minDist = Math.min(minDist, Math.abs(node.val - prev));
            }
            prev = node.val;
            helper(node.right);
        }
    }

    M2: inorder traversal (iterative)

    time: O(n), space: O(n)

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public int minDiffInBST(TreeNode root) {
            if(root == null) {
                return 0;
            }
            int minDist = Integer.MAX_VALUE;
            LinkedList<TreeNode> s = new LinkedList<>();
            TreeNode cur = root;
            int prev = Integer.MAX_VALUE;
            while(cur != null || !s.isEmpty()) {
                while(cur != null) {
                    s.offerFirst(cur);
                    cur = cur.left;
                }
                
                cur = s.pollFirst();
                if(prev != Integer.MAX_VALUE) {
                    minDist = Math.min(minDist, Math.abs(prev - cur.val));
                }
                prev = cur.val;
                cur = cur.right;
            }
            return minDist;
        }
    }
  • 相关阅读:
    OGG for sqlserver engryption && insert/delete
    MySQL中SQL_CALC_FOUND_ROWS的用法
    VMWARE 虚拟机新增硬盘,格式化分区,并挂载
    Mycat实战之数据迁移(oracle -- mysql)
    MYCAT实战之分片迁移
    mycat实战之性能测试
    Mycat实战之主键数据库自增方式
    对象的创建与克隆
    c#调用c++的dll,错误篇
    java 模拟消息的发送功能
  • 原文地址:https://www.cnblogs.com/fatttcat/p/10251061.html
Copyright © 2020-2023  润新知