Skip to content
Advertisement

Transform trie class method to trie node method

my question is how to transform this method from the trie class into a method of the node class that doesn’t use the node as a parameter, I know that I have to make a first method on the tree like this:

public void remove(String key)
{
    root = root.remove(key, 0); 
}

But I don’t know how to make the transformation of the method into the node class.

This is the method of the tree that I want to transform into a node method without using root as parameter of the method:

static TrieNode remove(TrieNode root, String key, int depth)
        {
            // If tree is empty
            if (root == null)
                return null;
     
            // If last character of key is being processed
            if (depth == key.length()) {
     
                // This node is no more end of word after
                // removal of given key
                if (root.isEndOfWord)
                    root.isEndOfWord = false;
     
                // If given is not prefix of any other word
                if (isEmpty(root)) {
                    root = null;
                }
     
                return root;
            }
     
            // If not last character, recur for the child
            // obtained using ASCII value
            int index = key.charAt(depth) - 'a';
            root.children[index] =
                remove(root.children[index], key, depth + 1);
     
            // If root does not have any child (its only child got
            // deleted), and it is not end of another word.
            if (isEmpty(root) && root.isEndOfWord == false){
                root = null;
            }
     
            return root;
        }

Advertisement

Answer

public TrieNode remove(String key, int depth)
        {

            // If last character of key is being processed
            if (depth == key.length()) {
     
                // This node is no more end of word after
                // removal of given key
                if (this.isEndOfWord)
                    this.isEndOfWord = false;
     
                // If given is not prefix of any other word
                if (isEmpty(this)) {
                    return null;
                }
     
                return this;
            }
     
            // If not last character, recur for the child
            // obtained using ASCII value
            int index = key.charAt(depth) - 'a';
            this.children[index] =
                this.children[index].remove(key, depth + 1);
     
            // If root does not have any child (its only child got
            // deleted), and it is not end of another word.
            if (isEmpty(this) && this.isEndOfWord == false){
                return null;
            }
     
            return this;
        }
User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement