题目
给定一个有序整数数组,元素隔壁相同且按升序排列,编写一个算法,创建一棵高度最小的二叉查找树
代码
public class CreatMinimalBST {
/**
*
*/
public static TreeNode creatMinimalBST(int arr[]) {
if (arr == null || arr.length == 0) {
return null;
}
int start = 0;
int end = arr.length - 1;
TreeNode node = doCreatMinimalBST(arr, start, end);
return node;
}
public static TreeNode doCreatMinimalBST(int arr[], int start, int end) {
if (end < start) {
return null;
}
int mid = (start + end) / 2;
TreeNode node = new TreeNode(arr[mid]);
node.left = doCreatMinimalBST(arr, start, mid - 1);
node.right = doCreatMinimalBST(arr, mid + 1, end);
return node;
}
public static void printTree(TreeNode root) {
System.out.println(root.value);//先序打印
if (root.left != null) {
printTree(root.left);
}
// System.out.println(root.value);//中序打印
if (root.right != null) {
printTree(root.right);
}
// System.out.println(root.value);//后序打印
}
/**
* @param args
*/
public static void main(String[] args) {
int test[] = { 1, 2, 3, 4, 5 };
TreeNode node = creatMinimalBST(test);
// 生成树
// 3
// / \
// 1 4
// \ \
// 2 5
printTree(node);
}
}
输出
3
1
2
4
5