来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数,其数值等于两值之差的绝对值。
解答
比较傻的方法是所有的数据用数组记录下来,每个节点遍历都计算下最小值,这个方法性能较差
/*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val = (val===undefined ? 0 : val)* this.left = (left===undefined ? null : left)* this.right = (right===undefined ? null : right)* }*//*** @param {TreeNode} root* @return {number}*/var minDiffInBST = function(root) {let min = Infinity;function traverse (node, values) {if (!node) return;const val = node.val;for (let value of values) {let temp = Math.abs(value - val);if (temp < min) {min = temp;}}values.push(val);node.left && traverse(node.left, values);node.right && traverse(node.right, values);}traverse(root, []);return min;};
更高性能解决方案
因为二叉搜索树,使用中序遍历,会产出一个升序数组
那么中序遍历时,只要获取每个节点跟前一个节点的差值,比较最小值即可
/*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val = (val===undefined ? 0 : val)* this.left = (left===undefined ? null : left)* this.right = (right===undefined ? null : right)* }*//*** @param {TreeNode} root* @return {number}*/var minDiffInBST = function(root) {let min = Number.MAX_SAFE_INTEGER, pre = -1;function traverse (node) {if (!node) return;traverse(node.left);if (pre === -1) {pre = node.val;} else {min = Math.min(min, node.val - pre);pre = node.val;}traverse(node.right);}traverse(root);return min;};
