From fcdf1422acd8757cffc8089f25713f0e92f4fdb0 Mon Sep 17 00:00:00 2001 From: bt3gl <138340846+bt3gl-google@users.noreply.github.com> Date: Sun, 30 Jul 2023 16:13:15 -0700 Subject: [PATCH] Update README.md --- trees_and_graphs/README.md | 42 +++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/trees_and_graphs/README.md b/trees_and_graphs/README.md index 36c5867..4559871 100644 --- a/trees_and_graphs/README.md +++ b/trees_and_graphs/README.md @@ -135,6 +135,17 @@ def postorder(self, root): 3. two items with an equal priority are dequeued based on their order in the queue +
+ +---- + +### n-ary tree + +
+ +* if a tree is a rooted tree in which each node has no more than N children, it's called N-ary tree. + +
---- @@ -143,14 +154,35 @@ def postorder(self, root):
-* a variant of n-ary tree in which characters are stored in each node -* each path down the tree represents a word -* the * nodes (null nodes) are often used to indicate complete words (usually represented by a special type of child) or a boolean flag that terminates the parent node -* a node can have anywhere from 1 through alphabet_size + 1 child -* can be used to store the entire english language for quick prefix lookup (O(k), where k is the length of the string) +* tries, also called prefix tree, are a variant of n-ary tree in which characters are stored in each node. +* each trie node represents a string (a prefix) and each path down the tree represents a word. note that not all the strings represented by trie nodes are meaningful. +* the root is associated with the empty string. +* the * nodes (null nodes) are often used to indicate complete words (usually represented by a special type of child) or a boolean flag that terminates the parent node. +* a node can have anywhere from 1 through alphabet_size + 1 child. +* can be used to store the entire english language for quick prefix lookup (O(k), where k is the length of the string). they are also widely used on autocompletes, spell checkers, etc. +* tries structures can be represented by arrays and maps or trees.
+#### insertion + +
+ +* similar to a bst, when we insert a value to a trie, we need to decide which path to go depending on the target value we insert. +* the root node needs to be initialized before you insert strings. + +
+ +#### search + +
+ +* all the descendants of a node have a common prefix of the string associated with that node, so it should be easy to search if there are any words in the trie that starts with the given prefix. +* we go down the tree depending on the given prefix, once we cannot find the child node, the search fails. +* we can also search for a specific word rather than a prefix, treating this word as a prefix and searching in the same way as above. +* if the search succeeds, we need to check if the target word is only a prefix of words in the trie or if it's exactly a word (for example, by adding a boolean flag). + +
---