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:
- The size of the BST will be between 2 and
100
. - 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; } }
原文地址:https://www.cnblogs.com/fatttcat/p/10251061.html
时间: 2024-10-10 00:25:21