在计算机科学中,trie 又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。

作用于二叉查找树上的基本操作(如查找,插入等)的时间复杂度与树的高度成正比。对一个含 n 个节点的完全二叉树,这些操作的最坏情况运行时间为 O(log n)。但如果因为频繁的删除和插入操作,导致树退化成一个 n 个节点的线性链(此时即为一个单链表),则这些操作的最坏情况运行时间为 O(n) 。为了克服以上缺点,很多二叉查找树的变形出现了,如红黑树AVL树Treap树等。

学习过了二叉查找树,想必大家有遇到一个问题。例如,将一个数组 {1,2,3,4} 依次插入树的时候,形成了如下(a)的情况。有建立树与没建立树对于数据的增删查改已经没有了任何帮助,反而增添了维护的成本。而只有建立的树如下(b),才能够最大地体现二叉树的优点。

Go的错误处理一直被吐槽太繁琐, 作为主要用GO的攻城狮, 经常写 if err!=nil, 但是如果想偷懒, 少带了上下文信息, 直接写 if err!=nil { return err} 或者 fmt.Errorf 携带的上下文信息太少了的话, 看到错误日志也会一脸懵逼, 难以定位问题.