摘自: 二叉树的详解 二叉树理论基础二叉树的每个结点至多只有两个子树,并且二叉树的子树有左右之分,其次序不能任意颠倒。
其中说一下:map、set、multimap,multiset(STL)set、map、multiset、multimap的介绍及使用
map、set:
Map(字典): Map 对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值)都可以作为一个键或一个值。
特点:
- 以键值对的形式存储数据,即 key-vlue 形式。
- Map 对象存储的数据是有序的,而我们平常使用的对象是无序的,所以通常当我们需要使用对象形式(键值对)存储数据且需要有序时,采用 Map 对象进行存储。
- Map 对象的键值可以是任意类型,我们平时使用的对象只能使用字符串作为键。
初始化 map 对象:
let myMap = new Map();
初始化 map 时传入数据:
由于 Map 对象是一个构造函数,所以我们在初始化的时候可以传入默认数据的,只不过我们需要注意传入默认数据的格式,它默认接收一个二维数组。
let defaultMap = new Map([['name', '张三'], ['age', 20]]);
插入数据:
myMap.set('name', '小猪课堂'); // 字符串作为键
myMap.set(12, '会飞的猪'); // number 类型作为键
myMap.set({}, '知乎'); // 对象类型作为键
Set(集合):Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。、
特点:
- 类数组对象,它长得就很像数组
- 存储的值是不重复的,通常使用它来实现数组去重。
- 存储的数据不是键值对的形式,可以存储任何类型的数据。
Set对象存储的不是键值对形式,它只存储了值,没有键,就和数组类似。
初始化Set对象:
let mySet = new Set();
初始化Set对象带有默认值:
和Map类似,Set初始化时也可以初始化默认数据。
let defaultSet = new Set(['张三', 12, true]);
- Map和Set查找速度都非常快,时间复杂度为O(1),而数组查找的时间复杂度为O(n)。
- Map对象初始化的值为一个二维数组,Set对象初始化的值为一维数组。
- Map对象和Set对象都不允许键重复(可以将Set对象的键想象成值)。
- Map对象的键是不能改的,但是值能改,Set对象只能通过迭代器来更改值。
二叉树的遍历方式:前中后序遍历(深度优先遍历),层序遍历(广度优先遍历)
二叉树定义:链式存储:
struct TreeNode{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x): val(x), left(NULL); right(NULL){}
};