https://leetcode.com/problems/closest-binary-search-tree-value/
Given a non-empty binary search tree and a target value, find the value in the BST that is closest to the target.
1. recursion
Complexity: 时间 O(logN) 空间 O(H)
思路
根据二叉树的性质,我们知道当遍历到某个根节点时,最近的那个节点要么是在子树里面,要么就是根节点本身。所以我们根据这个递归,返回子树中最近的节点,和根节点中更近的那个就行了。
public class Solution {
public int closestValue(TreeNode root, double target) {
// 选出子树的根节点
TreeNode kid = target < root.val ? root.left : root.right;
// 如果没有子树,也就是递归到底时,直接返回当前节点值
if(kid == null) return root.val;
// 找出子树中最近的那个节点
int closest = closestValue(kid, target);
// 返回根节点和子树最近节点中,更近的那个节点
return Math.abs(root.val - target) < Math.abs(closest - target) ? root.val : closest;
}
}
2.Iterative
We the node is in tree so traveling the BST and keep a value closet to target
Complexity: O(lgN)
public class Solution { public int closestValue(TreeNode root, double target) { int closest = root.val; while(root!=null){ //if current root.val is closer, update closest closest = Math.abs(closest-target)<Math.abs(root.val-target)?closest:root.val; //do binary search root = target<root.val?root.left:root.right; } return closest; } }
No comments:
Post a Comment