package com.interview.books.question300; import com.interview.leetcode.utils.TreeNode; import com.interview.leetcode.utils.TreeNodePrinter; /** * Created_By: stefanie * Date: 14-8-21 * Time: 上午10:43 */ public class TQ30_ClosestLargerF { public static int find(TreeNode root){ int f = getF(root); TreeNode node = find(root, f); return node.val; } public static TreeNode find(TreeNode node, int key){ if(node.val <= key && node.right != null) return find(node.right, key); else if(node.val > key){ if(node.left != null) { TreeNode n = find(node.left, key); return n == null? node: n; } else { return node; } } return null; } public static int getF(TreeNode root){ TreeNode node = root; while(node.left != null) node = node.left; int smallest = node.val; node = root; while(node.right != null) node = node.right; int largest = node.val; return (smallest + largest) / 2; } public static void verify(TreeNode root){ int f = TQ30_ClosestLargerF.getF(root); System.out.println(f); int k = TQ30_ClosestLargerF.find(root); System.out.println(k); } public static void main(String[] args){ int[] data = new int[]{15, 6, 18, 3, 7, 17, 20, 2, 4, 13, 9}; TreeNode root = TreeNode.buildBST(data); TreeNodePrinter.print(root); verify(root); data = new int[]{15, 6, 18, 3, 7, 14, 20, 2, 4, 11, 9}; root = TreeNode.buildBST(data); TreeNodePrinter.print(root); verify(root); } }