java - 未排序数组到二叉搜索树

标签 java arrays binary-search-tree

所以我确信这非常简单,我只是错过了它,但我需要为 BST 创建一个未排序的数组。我有一个数组 int[] data = { 50, 30, 60, 10, 80, 55, 40 };无论我将其更改为什么,我都需要将其转换为以第一个数字为根的不平衡二叉搜索树,其他数字遵循左右规则。我有这段代码适用于该数组,但如果我将数字更改为不在中间的数字,则无效。

 public Node arraytoBinary(int [] array, int start, int end) {
    if (start > end){
        return null;
    }
    int mid = (start + end) / 2;
    Node node = new Node(array[mid]);
   node.left = arraytoBinary(array, start, mid - 1);
   node.right = arraytoBinary(array, mid + 1, end);

    return node;
}    

最佳答案

我真的不明白为什么你尝试分割数组,看起来你正在对值及其顺序做出一些假设。 (虽然说实话我还没有运行你的代码)你不能想当然地认为你将要走的方向(左,右)。它取决于当前元素的值和当前节点持有的值。

我的方法是定义一个 insert(Node node, int value) 方法,并让 arrayToBinary 简单地迭代数组并调用 insert。这将为您提供一个具有最小界面的干净树。另外,它基于 BST 的定义和插入逻辑,因此应该很直观。

(伪为您高兴)
插入

<小时/>
Node insert(node, value)
    if node is null
        // Create a leaf.
        // It might be the root...
        return new Node(value)

    // It's occupied, see which way to
    // go based on its value

    // right? ...
    if value > node.value
        node.right = insert(node.right, value)

    // or left?
    else if value < node.value
        node.left = insert(node.left, value)

    // Code is not handling dups.
    return node
<小时/>

转化

<小时/>
Node arrayToBinary(array, root)
    for e in array
        root = insert(root, e)
    return root
<小时/>

这会将第一个元素保留为根,并按预期插入数组的其余部分。

关于java - 未排序数组到二叉搜索树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50264909/

相关文章:

加载属性文件时出现 Java NullPointerException

java - 在 Java 中打印字符数组

c - 当数组是另一个函数的形式参数时,函数参数中 typedef 常量大小数组的地址会导致指针类型不兼容

c++ - 二叉搜索树的最大深度

java - java 遍历二叉搜索树

java - TestNG 电子邮件报告 - PKIX 路径构建异常

java - 密码验证不允许在屏幕末尾出现特殊字符

java - 使用静态内部类如何避免内存泄漏?

iphone - objective-c : a C int array in a class interface?

binary-tree - 处理 AVL 树中的重复键