【发布时间】:2016-08-04 19:50:29
【问题描述】:
我想将已排序的整数数组转换为二叉搜索树。我在下面发布了我的代码。我无法想象的是递归实际上是如何与 for 循环一起工作的。
所以如果我的数组是 [1,3,4, 5,8,10],我将 4(数组的中间)作为我的 BST 的根,然后从数组的开头循环并插入到刚刚创建的带有根的树。我的问题是为什么插入的结果顺序不是给定的排序数组?
public TreeNode sortedArrayToBST(int[] A) {
if (A == null || A.length == 0){
return null;
}
TreeNode root = new TreeNode(findMid(A));
for (int i = 0; i < A.length; ++i){
insert(root, A[i]);
}
return root;
}
private int findMid(int[] A){
int left = 0;
int right = A.length -1;
int mid = A[left + (right - left)/2];
return mid;
}
private void insert (TreeNode root, int val){
if (root == null || root.val == val){
return;
}
if (val < root.val){
TreeNode left = new TreeNode(val);
root.left = left;
}
if (val > root.val){
TreeNode right = new TreeNode(val);
root.right = right;
}
insert(root.left,val);
insert(root.right,val);
}
【问题讨论】:
-
检查我修改后的答案,因为我认为问题在于你的递归逻辑
标签: java recursion binary-search-tree