Java / Groovy二叉树插入

时间:2015-07-20 15:58:47

标签: java groovy tree

我正在尝试编写一个二叉树递归插入,并且我在最后几个小时内无法到达。我得到一个stackoverflow错误或者没有插入所有项目。

我想在树中插入这些值:

   public void addNodeRecursion(MNode newNode){

        if(root == null) {
            root = newNode
        }else{
            addRecurs(newNode); //this is the recursive function, it should not return a node object
        }
    }

我想在不将root作为参数传递的情况下执行此操作。所以我的代码看起来像这样:

1 Step: 
            50

2 Step:
            50
           /
          25

3 Step:
            50
           /  \
          25  15

4 Step:
            50
           /  \
          25  15
         /
        10

5 Step:
            50
           /  \
          25  15
         /  \
        10  75

6 Step: (now notice that I am going back to the sibling of the current parent)

             50
           /   \
          25    15
         /  \   /
        10  75 85

注意,我不是在讨论二进制搜索树而是二元树,其中元素顺序不相关。我关心如何插入元素。我想插入它们,如下所示:

addRecurs

现在这是我的private void addRecurs(MNode newNode) { if(newNode == null) { return }; if(root.leftNode == null){ //Step 2 if the left node is null assign it root.leftNode = newNode }else{ //Else that means the right Node is null root.rightNode = newNode // Step 3 set the right node root = root.leftNode // the the parent to the left node addRecurs(newNode) // repeat } }; 功能:

{{1}}

它不起作用。

这可以在不跟踪或存储变量中的父项的情况下完成吗?

2 个答案:

答案 0 :(得分:1)

我建议你用Heap之类的东西来支持你的树。基本上是一个基于数组的树结构,你似乎不需要排序部分,所以它非常简单。为了更好的答案,我们需要更多信息

答案 1 :(得分:0)

您的问题是here的答案。

static void addNode(node n)
{
    if(root==null)
    {
        root = n;
    }
    else
    {
        node tmp = root; // save the current root
        if(root.getValue()>n.getValue())
        {
            root = root.leftLink;
            addNode(n);
        }
        else if(root.getValue()<n.getValue())
        {
            root = root.rightLink;
            addNode(n);
        }
        root = tmp; // put the root back to its original value
    }
    return;
}