Trie düğümündeki düğüm sayısı

0

Soru

Burada, Java'da Trie veri yapısını uygulayan bir sınıf Trie ve TrieNode oluşturdum. Trie'deki düğüm sayısını döndürmek için size() [return type int] adlı bir yöntem yazma görevim var.

class Trie {

    private TrieNode root;

    /////////////////////
    // TrieNode class
    class TrieNode {
        public char c;
        public boolean isWord;
        public TrieNode[] children;

        public TrieNode(char c) {
            this.c = c;
            isWord = false;
            children = new TrieNode[26];
        }
    }

    public Trie() {
        root = new TrieNode('\0');
    }

    public boolean isPrefix(String word) {
        return getNode(word) != null;
    }

    public void insert(String word) {
        TrieNode curr = root;
        for (int i = 0; i < word.length(); i++) {
            char c = word.charAt(i);
            if (curr.children[c - 'A'] == null)
                curr.children[c - 'A'] = new TrieNode(c);
            curr = curr.children[c - 'A'];
        }
        curr.isWord = true;
    }

    // Helper
    private TrieNode getNode(String word) {
        TrieNode curr = root;
        for (int i = 0; i < word.length(); i++) {
            char c = word.charAt(i);
            if (curr.children[c - 'A'] == null)
                return null;
            curr = curr.children[c - 'A'];
        }
        return curr;
    }

Trie'deki düğüm sayısını elde etmeye çalışıyordum ve düşündüğüm şey:

    public int size() {
        return size(root);
    }

    private int size(TrieNode root) {

        for (int i = 0; i < root.children.length; i++) {
            if (root.children[i] != null) {
                if (root.isWord)
                return 1;
                else
                    return 1 + size(root.children[i]);
            }
        }
        return 0;
    }

Ama doğru değildir. Herhangi bir fikir?

arrays data-structures java trie
2021-11-23 22:44:03
1

En iyi cevabı

0

Bu basit bir Derinlik ilk aramadır:

public static int size(TrieNode node) {
    if(node == null)
        return 0;
    
    int total = 1;
    
    for(TreeNode child : node.children)
        total += size(child);
    
    return total;
}

2021-11-23 22:51:30

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................