概念 树是一种非线性的数据结构,相对于线性的数据结构(链表、数组)而言,树由节点组成,树的平均运行时间更短(往往与树相关的排序时间复杂度都不会高),一般的树是有很多很多个分支的,分支下又有很多很多个分支,如果在程序中研究这个会非常麻烦。因为本来树就是非线性的,而我们计算机的内存是线性存储的,太过复杂 ...
分类:
其他好文 时间:
2018-10-28 19:26:44
阅读次数:
151
遍历方式的转至 "二叉树的四种遍历方式" 首先我们要知道三种遍历方式的规律: 先序遍历:跟在前,子树的根在后,左子树比右子树考前,且第一个就是根节点。 中序遍历:左子树在根左边,右子树在根右边,左边的部分是根节点的左子树的中序遍 历序列,右边部分是根节点右子树的中序遍历序列。 后序遍历:根在后,子树 ...
分类:
其他好文 时间:
2018-10-25 11:18:25
阅读次数:
140
遍历二叉树的递归方法使用了函数栈,非递归方法使用了申请的栈, 两者的额外空间都与树的高度有关,所以空间复杂度为O(h),h为二叉树的高度。 可以使用二叉树叶子节点中大量指向null的指针实现空间复杂度O(1)的遍历。 Morris遍历的实质就是避免使用栈结构,让下层到上层有指针, 具体是通过让底层节 ...
分类:
其他好文 时间:
2018-10-19 02:23:00
阅读次数:
184
一、前序遍历: 递归方式: 非递归方式:时间复杂度O(n),空间复杂度O(n) 二、中序遍历: 递归方式: 非递归方式: 三、后序遍历: 递归 非递归: ...
分类:
其他好文 时间:
2018-10-18 13:12:35
阅读次数:
147
二叉树遍历: https://blog.csdn.net/qq_33243189/article/details/80222629 https://www.cnblogs.com/llguanli/p/7363657.html 后缀表达式: https://blog.csdn.net/summerx ...
分类:
其他好文 时间:
2018-10-12 21:24:45
阅读次数:
151
1、 采用传统的递归 (O(n)的空间复杂度) 2、采用 Stack + 迭代的方式 (O(n)的空间复杂度) ①、先序遍历 ②、中序遍历 优化 ③、后续遍历 a、采用 Stack 进行压栈操作,同时采用一个 Map 记录该节点的右孩子是否被访问过 b、采用一个指针记录当前右孩子是否访问过 c、前序 ...
分类:
其他好文 时间:
2018-10-05 14:02:10
阅读次数:
139
学习算法并不是为了记住几个排序、二分查找、二叉树遍历,他还能锻炼你的逻辑思维、性能意识, 而且,如果你写代码能力还有欠缺,你还可以通过把学到的数据结构和算法都实现一遍, 这是一种很好很好的锻炼编程能力的方法。所以不要过度追求一定要在项目里手写快排、手写二叉树才能算是用上。 其实,我觉得,数据结构和算 ...
分类:
编程语言 时间:
2018-09-27 17:00:45
阅读次数:
160
一、题目 输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块。如果两个字符所在的格子相邻(横、竖、或者对角线方向),就说它们属于同一个八连块。 二、解题思路 和前面的二叉树遍历类似,图也有DFS和BFS遍历。由于DFS更容易编写,一般用DFS找联通块:从每个“@”格子出发,递归遍历与之相邻的 ...
分类:
移动开发 时间:
2018-09-16 16:14:10
阅读次数:
231
我之前考试是遇到过这题,但是数据范围k<=20,状压就能过。 结果原题范围k<=100000…… 果断线段树合并。 普及线段树合并: 比如两个相同大小的线段树,将b树各个区间上的值合并到a树上,从树根开始合并,然后递归合并左右儿子,有三种情况: (假设现在a树遍历到x点,b树遍历到y点) 1.x,y ...
分类:
其他好文 时间:
2018-09-01 20:35:53
阅读次数:
142
所谓普通二叉树,也就是排序二叉树,对于任何一个节点,它的左子树比自己大,右子树比自己小,不保证平衡因子的范围,其实这是最基础的二叉树,你也可以 增加他的搜索方法,就成了搜索二叉树。常见操作有构建排序二叉树、获取最大值、最小值、获取所有叶子节点、层级遍历、前序遍历、后序遍历、中序遍历、添加对象数组、添 ...
分类:
其他好文 时间:
2018-08-24 02:08:42
阅读次数:
253