Java 将已排序的双链接列表转换为平衡二叉搜索树?这个递归是如何工作的?
这不是一个重复的问题 当我们将排序数组转换为BST时,我们确实从左部分和右部分的Java 将已排序的双链接列表转换为平衡二叉搜索树?这个递归是如何工作的?,java,recursion,data-structures,binary-search-tree,Java,Recursion,Data Structures,Binary Search Tree,这不是一个重复的问题 当我们将排序数组转换为BST时,我们确实从左部分和右部分的n/2元素中得到左和右。然而,当我们试图转换双链接列表时,为什么我们从(len-(len/2)-1)中得到正确答案 基本上,我想了解为什么会有差异,以及如何向某人解释 有两段代码: 这两个公式正在进行不同的计算 在第一段代码中,start+end/2查找数组中间元素(正在转换的数组部分)的索引 而在第二段代码中,len-(len/2)-1查找列表后半部分的长度。在第二段代码中,当它递归调用ex:total leng
n/2
元素中得到左和右。然而,当我们试图转换双链接列表时,为什么我们从(len-(len/2)-1)
中得到正确答案
基本上,我想了解为什么会有差异,以及如何向某人解释
有两段代码:
这两个公式正在进行不同的计算 在第一段代码中,
start+end/2
查找数组中间元素(正在转换的数组部分)的索引
而在第二段代码中,
len-(len/2)-1
查找列表后半部分的长度。在第二段代码中,当它递归调用ex:total length为7:left n/2,right=len-(len/2)-1时。如何工作。在第二个代码中,长度为7:左半部分的长度为7/2
=3
(结果被截断为值为int
,而不是float
);右半部分的长度为7-(7/2)-1
=3
(7/2=3,与前面一样)。然后我们有两个长度3的一半,加上根:总共7个节点。user3093845,如果你认为我的答案对你有帮助,你能投赞成票,甚至接受我的答案吗。这样你就让别人知道我帮助过你了。@meBean谢谢你的快速回复。很抱歉反应太晚。方法1开始。上周末。下一步是1。07.3.
public static Node buildBalancedBST(List<Node> nodes, int start, int end)
{
// base case
if (start > end) {
return null;
}
// find the middle index
int mid = (start + end) / 2;
// The root node will be node present at the mid index
Node root = nodes.get(mid);
// recursively construct left and right subtree
root.prev = buildBalancedBST(nodes, start, mid - 1);
root.next = buildBalancedBST(nodes, mid + 1, end);
// return root node
return root;
}
private ListNode convertDllToBST(int len) {
if (len == 0) {
return null;
}
ListNode left = convertDllToBST(len / 2);
ListNode root = head;
root.prev = left;
head = head.next;
ListNode right = convertDllToBST(len - (len / 2) - 1);
root.next = right;
return root;
}