递归地将节点添加到二进制搜索树中,并显示错误

时间:2018-08-01 06:56:35

标签: java recursion binary-search-tree

我已经创建了一种将新项目添加到我的二进制搜索树中的方法,我不知道自己有什么错,但是它并没有添加任何内容到我的树中……我将附加我的BTNode类和我的add方法。我真的很感谢您的帮助/建议。

<link rel="stylesheet" href="~/Content/bootstrap-cerulean.css" />

//添加方法

    public class BTNode
{
  public int item;
  public BTNode left;
  public BTNode right;

  public BTNode(int i, BTNode l, BTNode r)
  {
    item = i;
    left = l;
    right = r;
  }

  public String toString() 
  {
    return "[" + item + "]";
  }

}

//测试器

public BTNode add (BTNode node, int value)
    {
        if (node == null)
        {
            node = new BTNode(value, null, null);
            return node;
        }
        else if (node.item > value)
            node.left = add(node.left, value);
        else if (node.item < value)
            node.right = add(node.right, value);

        return node;

    }

3 个答案:

答案 0 :(得分:0)

我认为问题出在以下几行:

    if (node == null)
    {
        node = new BTNode(value, null, null);
        return node;
    } else if (xxx)

您必须将其更改为:

    if (node == null)
    {
        node = new BTNode(value, null, null);
        if(this.item>value) {
            left = node;
        } else {
            right = node;
        }
        return node;
    } else if (xxx)

答案 1 :(得分:0)

根据您的main,我假设add方法属于BinarySearchTree类。

您的add方法可以正常工作,但是您必须显示树才能看到它的工作。

例如,如果您修改BTNode的{​​{1}}方法以显示给定节点的子树的所有节点:

toString()

您将看到打印public String toString() { StringBuilder sb = new StringBuilder(); if (left != null) { sb.append (left.toString ()); } sb.append ("[" + item + "]"); if (right != null) { sb.append (right.toString ()); } return sb.toString (); } 节点:

root

得出所有节点,包括您用System.out.println (root); 添加的节点:

tree.add(root,32);

您的[10][20][27][32][70][115][150][300] 方法的一个小问题是,如果树中已经存在具有相同值的节点,则不会添加新节点。我不知道这是否是预期的行为。

答案 2 :(得分:0)

如果我是你,我会将add封装到add(int val)的{​​{1}}中,下面是一个演示:

BinarySearchTree