树
二叉树和二叉查找树:
二叉查找树附加如下条件:对于任意节点,左子节点小于等于当前节点,当前节点又小于所有右子节点。
平衡与不平衡:
许多树都是平衡的,但并非全部如此。如果树是不平衡的,应当从平均情况和最坏情况所需的时间来描述算法。注意,平衡一棵树只意味着子树的深度差不会超过一定值,并不表示左子树和右子树的深度完全相同。
完满和完整:
完满和完整树的所有叶节点都在树的底部,所有非叶节点都有两个子节点,注意,完满和完整的树极少,因为这棵树必须正好有2的n次方-1个节点才满足这个条件。
二叉树遍历:
分为中序,后序,前序三种遍历方式。其中最常见的是中序遍历,先遍历左子树,然后访问当前节点,最后遍历右子树。
树的平衡(红黑树和平衡二叉)
单词查找树(trie):
trie树是n层数的一种变体,其中每个节点存储有字符。整棵树的每条路径自上而下表示一个单词。一颗简单的单词查找树如下图:
图
图比树要更复杂。一般遍历图有两种思路:广度优先搜索(BFS)和深度优先搜索(DFS)。
广度优先搜索(BFS)和深度优先搜索(DFS)通常用于不同的场景,如要访问图中的所有结点,或者访问最少的节点,DFS一般最为简单。不过如果一棵树的规模非常大,在离最初结点太远时想要随时退出的话可能会有问题;我们可能搜索了该节结点的成千上万个祖先结点,却还未搜索到该节点的全部子节点。对于这种情况一般首选BFS。