您的位置:首页 > 其它

Convert Sorted Array to Binary Search Tree 把一个有序数组转换成BST @LeetCode

2013-10-19 06:57 567 查看
题目:

给定一个有序的数组,要求转换为BST

思路:

递归。

每次找到数组中值作为BST的root,然后递归处理左半数组和右半数组分别作为左右子树

package Level2;

import Utility.TreeNode;

/**
* Convert Sorted Array to Binary Search Tree
*
* Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
*/
public class S108 {

public static void main(String[] args) {
int[] num = {1,3};
TreeNode n = sortedArrayToBST(num);
n.print();
}

public static TreeNode sortedArrayToBST(int[] num) {
return sortedArrayToBSTRec(num, 0, num.length-1);
}

// 二分查找节点值,并递归创建节点
private static TreeNode sortedArrayToBSTRec(int[] num, int low, int high){
if(low > high){
return null;
}
int mid = low + (high-low)/2;		// 找到中值
TreeNode root = new TreeNode(num[mid]);		// 创建根节点
root.left = sortedArrayToBSTRec(num, low, mid-1);		// 递归创建左子树和右子树
root.right = sortedArrayToBSTRec(num, mid+1, high);
return root;
}

}


/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode sortedArrayToBST(int[] num) {
return rec(num, 0, num.length-1);
}

public TreeNode rec(int[] num, int low, int high){
if(low > high){
return null;
}
int mid = low + (high-low)/2;
TreeNode root = new TreeNode(num[mid]);
root.left = rec(num, low, mid-1);
root.right = rec(num, mid+1, high);
return root;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: