作用于二叉查找树上的基本操作(如查找,插入等)的时间复杂度与树的高度成正比。对一个含 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 携带的上下文信息太少了的话, 看到错误日志也会一脸懵逼, 难以定位问题.