在BST中查找节点位置并递归地将其添加到树中

时间:2015-04-19 18:24:18

标签: java recursion binary-search-tree nodes

所以我有3个方法1使用traverseAdd方法将一个节点添加到二叉树中,另一个方法根据父节点查找值在树中放置的位置。我想消除traverseAdd方法并使用add方法中的findLocation方法将新值添加到BST。

 public void add(int val) {
            /*Adds a new node to the binary tree after traversing the tree and figuring out where it belongs*/
            Node nodeObjToAdd = new Node(val);

            if(root == null){
            //if node root is not null root = new node value
                root = nodeObjToAdd;
            }

            Node nodeTraversed = root;

            traverseAdd(nodeTraversed, nodeObjToAdd);
        }
    private void traverseAdd(Node node, Node nodeObjToAdd){
        /*Traverses tree and finds a place to add the node to be added by comparing values of the left child and right child of the
        * focus node*/
            if(nodeObjToAdd.value < node.value){
                if(node.leftChild == null){
                    node.leftChild = nodeObjToAdd;
                }
                else {
                    //if the val < the root.value set int he constructor
                    traverseAdd(node.leftChild, nodeObjToAdd);
                }
            }
            else if(nodeObjToAdd.value > node.value) {
                if (node.rightChild == null) {
                    node.rightChild = nodeObjToAdd;
                } else {
                    traverseAdd(node.rightChild, nodeObjToAdd);
                }
            }
        }
    public Node findNodeLocation(Node rootNode, int val) {
        /*returns where a the Node after which the value would be added.*/
            if(val < rootNode.value && rootNode.leftChild != null){
                return rootNode.leftChild;
            }
            if(val >= rootNode.value && rootNode.rightChild != null){
                return rootNode.rightChild;
            }
            else
                return this.root;

        }

1 个答案:

答案 0 :(得分:1)

public void add(int val) {
    if (root == null) {
        root = new Node(val);
    }
    Node cur = root;
    Node next = null;
    while (true) {
        next = findNodeLocation(cur, val);
        if (next != cur) {
            cur = next;         
        } else {
            break;
        }
    }
    if (val < cur.value) {
        cur.leftChild = new Node(val);
    } else {
        cur.rightChild = new Node(val);
    }
}

我认为这应该有用