向树添加元素

时间:2015-11-18 21:49:03

标签: java tree binary-tree nodes

我有一棵二叉树,我试图添加元素

问题是如果我有,并且在树中输入5 5 6 6 9 0 0 2 -1仅添加5 6 9 0 2(我使用-1来停止添加元素)

我尝试更改if(nodeToAdd.data < node.data)中的条件if(nodeToAdd.data <= node.data),但这没有帮助,我尝试了不同的条件,但没有,每次我都有堆栈溢出。

我需要更改什么才能添加相同数字的两倍,三倍或者n倍?有什么想法吗?

解决了问题,现在一切都运转良好了)

private Node traverseAndAddNode (Node node, int data){

    if(node==null)return new Node(data);

    if(data <= node.data){

       node.leftChild=traverseAndAddNode(node.leftChild, data);

    }else if(data > node.data){
        node.rightChild=traverseAndAddNode(node.rightChild, data);
    }

    return node;

}

2 个答案:

答案 0 :(得分:0)

目前,如果nodeToAdd.data == node.data,您的方法不会执行任何操作,因为两个if条件都会失败。你可能想要:

if (nodeToAdd.data < node.data) {
    ...
else {
    ...
}

在这种情况下,相同的节点将插入右侧。如果您希望将它们插入左侧,请创建if条件<=

这些都没有解释你提到的堆栈溢出,但这可能是一个无关的bug。我注意到您的代码依赖于添加的节点为null子节点。我建议你明确断言这个以确保在这个方法中没有向你的树添加循环。他们很可能会被添加到其他地方。

assert nodeToAdd.leftChild == null;
assert nodeToAdd.rightChild == null;

答案 1 :(得分:0)

我刚在树上尝试了你的代码。看起来很有效。

private Node put(Node i, Key key, Value value) {
    if (i == null) return new Node(key, value, 1);

//      int compare = key.compareTo(i.key);
//      if (compare < 0) i.left = put(i.left, key, value);
//      else if(compare > 0) i.right = put(i.right, key, value);
//      else i.value = value;
//      
//      //update N while unwinding stack
//      i.N = size(i.left) + size(i.right) + 1;
    int compare = key.compareTo(i.key);
    if (compare < 0) {
        if (i.left == null) i.left = new Node(key, value, 1);
        else put(i.left, key, value);
    }
    if (compare >= 0) {
        if (i.right == null) i.right = new Node(key, value, 1);
        else put(i.right, key, value);
    }       
    return i;
}



    //main
    BST<String, Integer> bst = new BST<>();
    String[] s = {"S", "S", "E", "E", "X", "A", "R", "C", "H", "M"};
    for (int i = 0; i < s.length; i++) {
        bst.put(s[i], i);   
    }   
    for(String key: bst.keys()) System.out.print(key + " "); // levelordered

输出:S E S A E X C R H M