package com.interview.algorithms.tree; import com.interview.basics.model.tree.BinarySearchTree; import com.interview.basics.model.tree.BinaryTreeNode; /** * Created_By: stefanie * Date: 14-8-21 * Time: 上午10:43 */ public class C5_21_ClosestLargerF { public static int find(BinarySearchTree<Integer> tree){ int f = getF(tree); BinaryTreeNode<Integer> node = find(tree, tree.getRoot(), f); return node.value; } public static BinaryTreeNode find(BinarySearchTree<Integer> tree, BinaryTreeNode<Integer> node, int key){ if(node.value == key) return tree.successor(node); else if(node.value < key && node.right != null) return find(tree, node.right, key); else if(node.value > key){ if(node.left != null) { BinaryTreeNode n = find(tree, node.left, key); return n == null? node: n; } else { return node; } } return null; } public static int getF(BinarySearchTree<Integer> tree){ BinaryTreeNode<Integer> node = tree.getRoot(); while(node.left != null) node = node.left; int smallest = node.value; node = tree.getRoot(); while(node.right != null) node = node.right; int largest = node.value; return (smallest + largest) / 2; } }