算法刻意练习之树、二叉树、二叉搜索树

1 树 Tree

1.1 特点

(1)树 Tree:

1.2 演示

(1)示例
算法刻意练习之树、二叉树、二叉搜索树

2 二叉树 Binary Tree

2.1 特点

(1)二叉树 Binary Tree:

2.2 演示

(1)构造
算法刻意练习之树、二叉树、二叉搜索树

(2)示例
算法刻意练习之树、二叉树、二叉搜索树
(3)分类
算法刻意练习之树、二叉树、二叉搜索树

算法刻意练习之树、二叉树、二叉搜索树

2.3 二叉树遍历

(1)前序遍历( Pre-order ) : 根 - 左 - 右;

(2)中序遍历( In-order ) : 左 - 根 - 右;

(3)后序遍历( Post-order ) : 左 - 右 - 根;

(4)模板
算法刻意练习之树、二叉树、二叉搜索树

3 图 Graph

3.1 特点

(1)树和图的区别:树没有环,图的节点有环

3.2 演示

(1)主要API

(2)示例
算法刻意练习之树、二叉树、二叉搜索树

3.3 总结

(1)Linked List是特殊化的 Tree;Tree是特殊化的 Graph
算法刻意练习之树、二叉树、二叉搜索树

4 二叉搜索树 Binary Search Tree

4.1 特点

(1)二叉搜索树,也称二叉排序树、有序二叉树(Ordered Binary Tree)、排序二叉树(Sorted Binary Tree),是指一棵空树或者具有下列性质的二叉树:

  1. 左子树上所有结点的值均小于它的根结点的值
  2. 右子树上所有结点的值均大于它的根结点的值
  3. 以此类推:左、右子树也分别为二叉查找树。 (这就是 重复性!)

(2)中序遍历结果:升序排列;一般来说我们会把树变得有序,这样才有树存在的意义,否则就跟普通链表一样了。普通的没有任何状态的树,查找节点需要遍历整棵树,时间复杂度是O(n)。

4.2 演示

(1)主要API

(2)示例
算法刻意练习之树、二叉树、二叉搜索树

4.3 常见操作

(1)查询 O(logn);
(2)插入新节点(创建) O(logn);
(3)删除 O(logn);

(4)极端情况,树是一根棍子,退化为了链表,所以查找是 O(n);
(5)二叉搜索树Demo

5 时间复杂度

算法刻意练习之树、二叉树、二叉搜索树