二叉搜尋樹中最接近的值——lintcode900
阿新 • • 發佈:2022-01-02
二叉搜尋樹中最接近的值
題目:二叉搜尋樹中最接近的值
給一棵非空二叉搜尋樹以及一個target值,找到在BST中最接近給定值的節點值
示例:
輸入: root = {5,4,9,2,#,8,10} and target = 6.124780
輸出: 5
解釋:
二叉樹 {5,4,9,2,#,8,10},表示如下的樹結構:
5
/ \
4 9
/ / \
2 8 10
題解:分治法
方法1:遞迴實現
public class Solution { double minDValue; int result; public void dfs(TreeNode root, double target) { if(root==null) return; double divide=Math.abs(root.val-target); if(divide< minDValue){ minDValue =divide; result=root.val; } if(target<root.val) dfs(root.left, target); else dfs(root.right, target); } public int closestValue(TreeNode root, double target) { minDValue=Double.MAX_VALUE; dfs(root, target); return result; } }
方法2:非遞迴實現
public class Solution0 { public int closestValue(TreeNode root, double target) { double minDValue=Double.MAX_VALUE; int result=0; while (root!=null) { double divide=Math.abs(target-root.val); if(divide<minDValue){ minDValue=divide; result=root.val; } if(target<root.val) { root=root.left; }else { root=root.right; } } return result; } }