当前位置: 首页 > 知识库问答 >
问题:

将排序的双链表转换为平衡的二叉搜索树?这种递归是如何工作的?

法风畔
2023-03-14

这不是一个重复的问题。

当我们将排序数组转换为BST时,我们确实从n/2元素的左部分和右部分得到左和右。而当我们试图转换双链表时,为什么我们从(len-(len/2)-1)得到正确的结果。

基本上,我想明白为什么会有差别,以及如何向某人解释。

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;
    }

共有1个答案

闽朝
2023-03-14

这两个公式正在进行不同的计算。

在第一段代码中,start+end/2查找数组中间元素的索引(数组中要转换的部分)。

而在第二段代码中,len-(len/2)-1查找列表后半部分的长度。

 类似资料:
  • 这个问题是在最近的一次编码采访中被问到的。 问:给定一个二叉树,写一个程序把它转换成双链表。双链表中的节点按zig-zag级顺序遍历形成的序列排列

  • 这就是我到目前为止的代码(由于递归方面的困难,这并不是太多) 几乎只是将头部指针设置为中间信息(4)

  • 在我的解决方案中,我遇到了一个“None's not have.val”的问题。。。我想知道如何调试它。。。 以下是描述 将BST转换为已排序的循环双链接列表。将左指针和右指针视为双链接列表中上一个和下一个指针的同义词。] 让我们以下面的BST为例,它可能会帮助您更好地理解这个问题:我们希望将这个BST转换为一个循环双链接列表。双链表中的每个节点都有一个前导节点和后继节点。对于循环双链表,第一个元

  • 我刚刚学习了如何创建二进制搜索数据结构,它将用于存储字典中的数千个单词。我遇到的问题是,统计添加和删除数据需要很长时间。通常为199263毫秒或200秒,计算100000个单词。有人告诉我,拥有一棵能够自我平衡的树将提高效率,使操作更快。 我的问题是如何使我的树自动平衡以使其高效。我通过消除重复的单词来使树的高度变短,从而做了一些小小的改进。 如果有人能给我一些建议,告诉我如何使树高效,以及如何在

  • 所以,我一直在研究平衡的二叉查找树。 我谷歌了一下,这是我的发现: 二叉树,其中每个节点的两个子树的深度相差 1 或更小(来自维基百科) 难道就不能把平衡二叉树定义为高度不超过ceil(log(n ^ 1)/log ^ 2)的树吗? 从这个答案来看,提问者似乎已经问了同样的事情,但是公认的答案通过举斐波纳契树的例子拒绝了这个想法。斐波纳契树不是平衡树,对吗?我认为回答者可能会与AVL树中平衡树的定

  • 在上一节中,我们考虑构建一个二叉搜索树。正如我们所学到的,二叉搜索树的性能可以降级到 $$O(n)$$ 的操作,如 get 和 put ,如果树变得不平衡。在本节中,我们将讨论一种特殊类型的二叉搜索树,它自动确保树始终保持平衡。这棵树被称为 AVL树,以其发明人命名:G.M. Adelson-Velskii 和E.M.Landis。 AVL树实现 Map 抽象数据类型就像一个常规的二叉搜索树,唯一