簡體   English   中英

為什么指針在第 27 行不遞增

[英]why the pointer is not incrementing at line 27

我正在實現 trie 數據結構,為什么我的指針在第 27 行沒有遞增。所有字符都只進入 forst 節點。 這是我的代碼

class Trienode:
    data:str
    next:list = [None]*26
    isTerminal:bool = False

    def __init__(self,data):
        self.data = data


class Trie:

    def __init__(self):
        self.root  = Trienode('#')

    def insert(self,data):
        
        temp = self.root

        for ch in data:
            index = ord(ch)- ord('a')
            # print(temp.next[index])
            if temp.next[index]==None:
               
                temp.next[index] = Trienode(ch)
                temp = temp.next[index]
            
            else:
                temp = temp.next[index]
        temp.isTerminal = True

    def display(self):
        temp = self.root
        for i in range(26):
            print(temp.next[i])


if  __name__=='__main__':
    root = Trie()
    root.insert("apple")
    root.insert("pineapple")

    root.display()

這是控制台上的 output 我正在打印第一個節點控制台的指針數組 output

我嘗試了相同的邏輯來增加 Linkedlist 中的指針,它工作正常。

我已經稍微修改了你的樣本。 相關更改以注釋突出顯示

class Trienode:
    def __init__(self, data):
        self.data: str = data
        self.next: list = [None] * 26
        self.isTerminal: bool = False

    def __str__(self):  # get more info on display
        return f"{self.data} - {''.join(str(n) for n in self.next if n is not None)}"

    def __repr__(self):  # appears nicely in my IDE ;)
        return f'Trienode({self.data})'


class Trie:

    def __init__(self):
        self.root = Trienode('#')

    def insert(self, data):

        temp = self.root

        for ch in data:
            index = ord(ch) - ord('a')
            if temp.next[index] is None:  # error was there I guess
                temp.next[index] = Trienode(ch)
            temp = temp.next[index]  # and here also
        temp.isTerminal = True

    def display(self):
        self._display(self.root)

    def _display(self, node):  # must use a recursion to display all the children
        print(node)
        for child in node.next:
            if child is not None:
                self._display(child)



if __name__ == '__main__':
    root = Trie()
    root.insert("apple")
    root.insert("pineapple")

    root.display

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM