4

When I added node into binary tree and trying to show information about it, info isn't showing. I think that i have some problems with references in recursive insert algorithm, but can't fix it.

package test;

class BinaryTree<T> {
    private static class Node<T> {
        int key;
        T data;
        Node<T> leftChild;
        Node<T> rightChild;

        public Node(int key,T data) {
            this.key = key;
            this.data = data;
        }
    }

    public Node<T> rootNode;

    public BinaryTree() {
        rootNode = null;
    }

    public Node<T> getRootNode() {
        return rootNode;
    }

    // insert node into binary tree
    public void insertNode(int key,T data, Node<T> rootNode) {
        // to create new node

        // if tree doesn't have root elements
        if(rootNode == null) {
            rootNode = new Node<T>(key,data);
            rootNode.leftChild = null;
            rootNode.rightChild = null;
        }
        else {
            Node<T> focusNode = rootNode;

            if(key >= focusNode.key) {
                insertNode(key,data,focusNode.rightChild);
            }
            else {
                insertNode(key,data,focusNode.leftChild);
            }
        }
    }

    // inorder traverse tree
    public void inOrderTraverseTree(Node<T> focusNode) {
        if(focusNode != null) {
            inOrderTraverseTree(focusNode.leftChild);
            System.out.println(focusNode.data);
            inOrderTraverseTree(focusNode.rightChild);
        }
    }
}

public class MyApp {
    public static void main(String[] args) {
        BinaryTree<String> bintree = new BinaryTree<String>();
        bintree.insertNode(3, "Boss", bintree.rootNode);
        bintree.inOrderTraverseTree(bintree.rootNode);
    }
}

If I'm adding node with this algorithm and trying to show info, it works. How can i fix problem with recursive algorithm?

public void addNode(int key, T name) {
        Node<T> newNode = new Node<T>(key,name);
        if(rootNode == null) {
            rootNode = newNode;
        }
        else {
            Node<T> focusNode = rootNode;
            Node<T> parent;
            while(true) {
                parent = focusNode;
                if(key < focusNode.key) {
                    focusNode = focusNode.leftChild;
                    if(focusNode == null) {
                        parent.leftChild = newNode;
                        return;
                    }
                }
                else {
                    focusNode = focusNode.rightChild;
                    if(focusNode == null) {
                        parent.rightChild = newNode;
                        return;
                    }
                }
            }
        }
    }

Thanks for any help.

1 Answer 1

3

Quick glance on your code -- I spotted on this part where you're checking for null, rootNode variable is local to the function. Hence the new Node you created gets thrown away immediately after the function quits, it won't change your member field

    // if tree doesn't have root elements
    if(rootNode == null) {
        rootNode = new Node<T>(key,data);
        rootNode.leftChild = null;
        rootNode.rightChild = null;
    }

You need to use this.rootNode = new Node<T>(key,data); instead, or use a different local variable name to avoid confusion

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.