- 博客(16)
- 收藏
- 关注
原创 剑指offer写题汇总:数组中重复的数字1
剑指offer:数组中重复的数字11.题目描述2.解题思路解题思路全部来源于《剑指offer》,在代码部分,书本中往往提供的是思路相对较优的代码,但是其他思路的实践也是很有意义的,因此将几种思路的代码在这里进行汇总。思路1: 首先将数组进行排序,然后再从头到尾扫描数组即可。 bool duplicate(int numbers[], int length, int* duplica...
2020-02-08 17:11:49
105
原创 LeetCode写题历程——437. 路径总和 III
1.题目描述给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。2.解题思路(1)设以根节点为起点。因为路径方向是向下,所以采取前序遍历的方法遍历节点,遍历节点的过程...
2019-03-01 22:39:19
183
原创 LeetCode写题历程——429.N叉树的层次遍历
1.题目描述给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。2.解题思路(1)N叉树和二叉树在递归过程中的区别是:二叉树中每一个节点自身只有左右两个子节点可以进行递归操作,而N叉树需要使用一个循环来对其每一个孩子节点进行递归。(2)其余思路与二叉树的层次遍历一致,用一个变量depth来记录遍历过程中节点的深度。/*// Definition for a Nod...
2019-03-01 00:34:11
167
原创 LeetCode写题历程——404.左叶子之和
1.题目描述计算给定二叉树的所有左叶子之和。2.解题思路(1)只有为父节点的左子节点并且自身的左右子节点都为NULL时才是左叶子节点。(2)当父节点的左子节点不为NULL,并且该左子节点自身的左右子节点都为NULL时,该左子节点为左叶子节点,使用变量sum对其进行累加。(3)使用前序遍历的顺序遍历该棵树的所有节点,对每一个节点都进行(2)步骤,最终得到累加值sum。(4)注意特殊情况...
2019-03-01 00:24:32
179
原创 LeetCode写题历程——257. 二叉树的所有路径
1.题目描述给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。2.解题思路(1)因为要遍历到叶子节点,递归的终止条件就是节点的左子节点和右子节点都为NULL。(2)使用 string s 来存储路径,如果此时s为空字符串,则直接添加当前节点的节点值。因为节点值为整型,所以使用to_string()来进行转换。若s此时不是空字符串,则添加’->...
2019-03-01 00:14:07
169
原创 LeetCode写题历程——235. 二叉搜索树的最近公共祖先
1.题目描述给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]说明:所有节点的值都是唯一...
2019-02-26 11:33:52
151
原创 LeetCode写题历程——226.翻转二叉树
1.题目描述翻转一棵二叉树。2.解题思路(1)一开始我的思路是直接对原二叉树进行翻转,但是一直没有想到好的解决方法。(2)无法对原二叉树进行操作,索性就构建一棵新的二叉树,该二叉树满足题设条件即可。对于新二叉树,要求每一个节点的左子节点是原二叉树对应位置节点的右子节点,每一个节点的右子节点是原二叉树对应位置节点的左子节点。(3)按照前序遍历的顺序来构建新二叉树。在构建的过程中,我们需要...
2019-02-22 11:27:15
126
原创 LeetCode写题历程——112.路径总和
1.题目描述给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点2.解题思路(1)因为求得时根节点到叶子节点的路径和,所以每一次遍历的中止条件是当前节点的左右节点都为空。(2)使用一个中间变量temp对遍历过程中的节点值进行累加,当遍历到叶子节点时,如果temp与给定的sum相等,返回true,否则...
2019-02-21 22:03:47
107
原创 LeetCode写题历程——111. 二叉树的最小深度
1.题目描述给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。2.解题思路(1)参考之前求最大深度的方法,这次应该是1(根节点自身)+min(左子树深度,右子树深度)。(2)这里要注意,当左子树或者右子树有一个深度为零时,应该使用1(根节点自身)+max(左子树深度,右子树深度)计算深度,否则深度为根节点自身...
2019-02-19 22:08:24
135
原创 LeetCode写题历程——110.平衡二叉树
1.题目描述给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。2.解题思路(1)利用104题求二叉树的最大深度的方法来求每个节点的左右两棵子树的最大深度。(2)为了满足题设条件,左右两棵子树的最大高度的差的绝对值必须小于等于1.(不知道哪棵子树的深度更大所以用绝对值)(3)当每个节点都满足这个...
2019-02-19 21:16:53
123
原创 LeetCode写题历程——108. 将有序数组转换为二叉搜索树
1.题目描述将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。2.解题思路(1)二叉搜索树:它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别...
2019-02-18 22:18:20
111
原创 LeetCode写题历程——107. 二叉树的层次遍历 II
1.题目描述给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)2.解题思路(1)可以自顶向下遍历,最后进行反转即可。(2)向下遍历的过程中记录层数,靠层数来定位当前位置,以便判断是继续在该层遍历还是向下一层转移。(根结点处层数为0)(3)传入的容器需要初始化,空的容器无法使用size()和empty()等方法进行辅助判断。(4)...
2019-02-18 22:07:38
142
原创 LeetCode写题历程——13.罗马数字转整数
1.题目描述罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符数值I1V5X10L50C100D500M1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况下,罗马数字中小...
2019-02-16 11:19:35
95
原创 LeetCode写题历程——104.二叉树的最大深度
1.题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。2.解题思路(1)利用递归的方法(2)最大深度=1(根节点)+max(根节点的左子树深度,根节点的右子树深度)/** * Definition for a binary tree node. * struct TreeNode { * ...
2019-02-15 23:26:28
90
原创 LeetCode写题历程——101.对称的树
1.题目描述给定一个二叉树,检查它是否是镜像对称的。2.解题思路(1)方法与100类似。(2)在解题的过程中,我一开始思考不用递归的方法来写,先使用先序遍历的方法来遍历二叉树,并保存二叉树每个节点的值。如果这组值是回文数的话,那么二叉树就是对称的,但是这种方法仅仅对满二叉树适用。/** * Definition for a binary tree node. * struct Tre...
2019-02-15 23:15:52
94
原创 LeetCode写题历程——100.相同的树
1.题目描述2.解题思路(1)利用深度优先搜索(DFS)的方法来进行递归操作。(2)当两个二叉树的一个节点对应相等时,利用递归判断他们的左右节点是否对应相等,并且一直遍历到所有的叶子节点,两个二叉树才相等。// An highlighted block/** * Definition for a binary tree node. * struct TreeNode { * ...
2019-02-15 22:47:26
115
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人