112-路径总和

作者:LeetCode 链接:112. 路径总和 来源:力扣 (LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 一、题目描述 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。 说明:叶子节点是指没有子节 ... 阅读更多

数据结构之树:二叉树的实现

相对于栈和链表等数据结构来说,树有着更复杂的结构。正如我们平常生活中看到的树一样,它有很多分支,而且分支上面还会有分支。 树的用途十分广泛,最常见的树是二叉树,衍生了很多类型的树,红黑树,搜索树等等,被用来查找效率十分高,一个最典型的应用就是 mysql 中的索引。 树是由很多个节点构成,要实现一个树最 ... 阅读更多

数据结构之列表:双向链表的实现

双向链表是链表的一个分支,相比单向链表来说多了个一个前向指针 pre,指向当前节点的前一个节点,查找起来更为灵活。 二、链表节点实现 双向链表的节点可以继承单向链表的节点,添加一个 pre 成员即可。两者声明和实现方式都差不多:

二、链表实 ... 阅读更多

数据结构之链表 (一):单向链表

一、单向链表 1.1 单向链表 链表是一种线性结构,通过一个链把所有的节点都链起来,因此叫做链表。它和数组最大的不同是:数组的内存是连续的,而链表不是。数组支持随机读写,但是插入和删除麻烦,链表不支持随机读写,但是插入和删除很方便。在更多场景下,链表用途更广。 一个链表的图形示例如下,每个链表节点都 ... 阅读更多

数据结构之队列:队列的实现

队列是一种先进先出的数据结构,因和平常生活中的排队流程一样因此被称为队列。操作逻辑和栈刚好相反。 常用操作: enqueue: 元素入队 dequeue: 首元素出队 size: 返回队列中元素的个数 empty: 判断队列是否为空 front: 返回队首元素 它有两个指针分别指向队列开头和结尾,出 ... 阅读更多

数据结构之栈 (三):顺序栈实现

顺序栈的实现和使用数组实现原理一样,都是预先申请一段连续的地址块作为数据域,通过栈顶下标或指针移动完成压栈、出栈等操作。不同的是,使用指针的顺序栈支持栈满时扩容操作,原理更倾向于 vector 的实现。 顺序栈初始化时申请一块固定大小内存空间保存数据,栈顶指针在内存区域来回移动: 要注意的是,初始时栈为 ... 阅读更多

数据结构之栈 (二):链式栈实现

链栈的原理和链表的原理一样,通过一个 next 指针把一个个的节点链起来: 初始时,栈底指针和栈顶指针都为空,每插入一个节点,栈顶指针改变,当前插入节点的 next 指针指向之前的栈顶元素。 同样,在使用 top() 和 pop() 两个方法时,也要先判断栈是否为空。 一、栈节点 [crayon-698680afe ... 阅读更多

数据结构之栈:使用数组和 vector 实现栈

栈是一种 「先进后出」 的数据结构,最先进入栈的元素位于栈的底端,最后进入的位于顶端。 其主要的接口函数为: pop(): 弹出顶端元素 size(): 返回栈容量 empty(): 判断栈是否为空 push(T data): 添加元素到栈顶 top(): 返回顶端元素 注意事项 对于栈的 top() 和 p ... 阅读更多

排序算法三:冒泡排序

一、原理 冒泡排序的原理很简单, 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序 (如从大到小、首字母从从 Z 到 A) 错误就把他们交换过来。 冒泡排序是一种稳定的排序算法。 冒泡排序不管在什么情况下,时间复杂度都是 O() 。 对比插入排序来说,在平均的情况下,插入排序性能是冒泡排序的两倍。 ... 阅读更多

排序算法二:选择排序

一、原理 选择排序 (Selection sort) 是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小 (或最大) 的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小 (大) 元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序 ... 阅读更多