线性数组的二叉树构造函数

时间:2015-04-23 14:01:54

标签: java arrays binary-tree

注意:这是IS作业,所以请不要直接给我答案,但指针会有所帮助。

作业概述:

  

(测试每种方法以确保其正常工作。)

     
      
  1. 生成一个二元搜索,其中100个元素以正确的顺序添加 - 以正确的顺序将数字1到100添加到树中添加1,然后是2,然后是3,等等。

  2.   
  3. 生成二元搜索,其中100个元素按逆序添加 - 添加数字100,99,98等。

  4.   
  5. 使用100个随机生成的元素生成二进制搜索。

  6.   

我在问题中说线性数组的原因是因为根必须是数组中的第一个元素,然后添加其余元素。

我没有正确测试树是否正确测试所需的所有其他方法,我即将离开工作。但是,我发布的算法起点低于我认为可行,但不确定。

threshold = 10**6
value = 0

while value < 10*9:
    if value > threshold:
        print "%d exceeded %d" % (value, threshold)
        threshold += 10**6

    value += random.randint(0, 1000)

这几乎就是整个算法,我不得不再做一次,但要反转&lt;和&gt;迹象(如果这是正确的)。我是否在使用此算法的正确途径?

按要求添加节点类。

public BST(int[] numbers)
{
    node root;
    node currentParent; 
    node previousParent = null; 
    int i = 1; // skip the root, that will be handled manualy 

    root = new node(numbers[0]); // first element is the root
    currentParent = root;

    // handle right hand side of binary tree first
    while (i > root.getValue())
    {
        while (i > currentParent.getValue())
        {
            node newNode = new node (numbers[i]);
            currentParent.setRightChild(newNode);
            previousParent = currentParent;
            currentParent = newNode;
            i++;
        } // end inner while

        if (previousParent.leftChild == null)
        {
            node newNode = new node(numbers[i]);
            previousParent.leftChild =  newNode;
            currentParent = newNode;
            i++;
        } // end if branch
        else
        {
            System.out.println("Hmm, something seems to be wrong!");
        } // end else
    } // end right side binary tree while
} // end integer array constructor

1 个答案:

答案 0 :(得分:3)

不,对不起,这是错的。

  1. 您正在将索引与数据值进行比较。你应该只将相同的东西与同样的东西进行比较。想象一下,任务是将数字1001到1100放入树中,而不是1到100.这样可以更容易区分索引和数据值(这里的区别非常微妙,因为你的索引是0到99而你的数据值1到100)。
  2. 你不能假设你“先处理右手部分”。您必须根据其值,以及它是否小于或大于当前节点的值来决定给定项目是向左还是向右。
  3. 如果你有一个无序数组,那么首先尝试添加所有高值,然后所有低值都不起作用。
  4. 最后一个提示:该类应命名为Node,而不是node。类和所有类型名称应以大写字母开头,变量,字段和方法名称应以小写字母开头,常量应以全部大写字母开头。